Para responder à pergunta em seu título, mas não no caso específico que você fornece, é perfeitamente correto, toneladas de pacotes fazem isso. Provavelmente é melhor descobrir você mesmo em vez de confiar no usuário; aqui está pySerial fazendo isso como um exemplo.
serial/__init__.py
import sys
if sys.platform == 'cli':
from serial.serialcli import Serial
else:
import os
# chose an implementation, depending on os
if os.name == 'nt': # sys.platform == 'win32':
from serial.serialwin32 import Serial
elif os.name == 'posix':
from serial.serialposix import Serial, PosixPollSerial, VTIMESerial # noqa
elif os.name == 'java':
from serial.serialjava import Serial
else:
raise ImportError(
"Sorry: no implementation for your platform ('{}') available".format(
os.name
)
)
Isso deve ser usado apenas nos casos em que você está assumindo e precisa de uma garantia forte de que certas interfaces / recursos estarão lá: por exemplo, um 'arquivo' chamado /dev/ttyX. No seu caso: lidando com JSON, não há nada que seja realmente específico do sistema operacional e você está apenas verificando se o pacote existe ou não. Nesse caso, apenas trypara importá-lo e retorne com um exceptse falhar:
try:
import some_specific_json_module as json
except ImportError:
import json
platform.platform()ouplatform.system()deve fazer o que você precisa, em vez de ter que um usuário precisar inserir algo toda vez que o código for executado.