Я ищу самый элегантный способ уведомить пользователей моей библиотеки о том, что им нужна определенная команда unix, чтобы убедиться, что она будет работать ...
Когда моей библиотеке лучше всего выдавать ошибку:
- Установка ?
- Когда мое приложение вызывает команду?
- При импорте моей библиотеки?
- обе?
А также как определить, что команда отсутствует (if not commands.getoutput("which CommandIDependsOn"): raise Exception("you need CommandIDependsOn")
).
Мне нужны советы.
2 ответа
Я бы вообще не получил чека. Документируйте, что вашей библиотеке требуется эта команда, и если пользователь попытается использовать ту часть вашей библиотеки, которая в ней нуждается, то при выполнении команды будет вызвано исключение. По-прежнему должна быть возможность импортировать вашу библиотеку и использовать ее, даже если предлагается только часть функций.
(PS: commands
старый и сломанный, и его не следует использовать в новом коде. subprocess
- самая горячая новинка.)
IMO, лучший способ - проверить при установке, есть ли у пользователя эта конкретная команда * nix.
Если вы используете distutils для распространения своего пакета, для его установки вам необходимо сделать:
python setup.py построить python setup.py установить
Или просто
установка python setup.py (в этом случае сборка python setup.py неявная)
Чтобы проверить, установлена ли команда * nix, вы можете создать подкласс метода сборки в файле setup.py следующим образом:
from distutils.core import setup
from distutils.command.build import build as _build
class build(_build):
description = "Custom Build Process"
user_options= _build.user_options[:]
# You can also define extra options like this :
#user_options.extend([('opt=', None, 'Name of optionnal option')])
def initialize_options(self):
# Initialize here you're extra options... Not needed in your case
#self.opt = None
_build.initialize_options(self)
def finalize_options(self):
# Finalize your options, you can modify value
if self.opt is None :
self.opt = "default value"
_build.finalize_options(self)
def run(self):
# Extra Check
# Enter your code here to verify if the *nix command is present
.................
# Start "classic" Build command
_build.run(self)
setup(
....
# Don't forget to register your custom build command
cmdclass = {'build' : build},
....
)
Но что, если пользователь удалит требуемую команду после установки пакета? Чтобы решить эту проблему, единственное «хорошее» решение - использовать системы упаковки, такие как deb или rpm, и установить зависимость между командой и вашим пакетом.
Надеюсь это поможет
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.