Я разрабатываю приложение Python и в процессе выпуска релиза. У меня есть сервер PyPI, настроенный на сервере компании, и я скопировал на него исходный дистрибутив своего пакета.
Я проверил, что пакет размещается на сервере, а затем попытался установить его на свой локальный компьютер для разработки. Я закончил с этим выводом:
$ pip3 install --trusted-host 172.16.1.92 -i http://172.16.1.92:5001/simple/ <my-package>
Collecting <my-package>
Downloading http://172.16.1.92:5001/packages/<my-package>-0.2.0.zip
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\<me>\AppData\Local\Temp\pip-build-ubb3jkpr\<my-package>\setup.py", line 9, in <module>
import appdirs
ModuleNotFoundError: No module named 'appdirs'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\<me>\AppData\Local\Temp\pip-build-ubb3jkpr\<my-package>\
Причина в том, что я пытаюсь импортировать стороннюю библиотеку appdirs
в свой setup.py
, которая необходима мне для вычисления аргумента data_files
в setup()
:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
import os
from collections import defaultdict
import appdirs
from <my-package>.version import __version__ as <my-package>_version
APP_NAME = '<my-app>'
APP_AUTHOR = '<company>'
SYSTEM_COMPONENT_PLUGIN_DIR = os.path.join(appdirs.user_data_dir(APP_NAME, APP_AUTHOR), 'components')
# ...
setup(
# ...
data_files=component_files,
)
Однако у меня не установлено appdirs
на моей локальной машине разработки, и я не ожидаю, что оно будет установлено и у конечных пользователей.
Допустимо ли полагаться на сторонние библиотеки, подобные этой, в setup.py
, и если да, то каков рекомендуемый подход к их использованию? Есть ли способ убедиться, что appdirs
будет установлен до того, как он будет импортирован в setup.py
, или я должен просто задокументировать, что appdirs
является обязательным пакетом для установки моего пакета?
setup_requires
? См. pip.readthedocs.io/en/1.4.1. / - person Peter Brittain   schedule 04.06.2017setup()
, один в верхней частиsetup.py
только сsetup_requires=['appdirs']
, а другой уже внизу? - person Tagc   schedule 05.06.2017