Python не устанавливает зависимости, перечисленные в install_requires из setuptools
Я написал модуль python, который зависит от openpyxl. Я хочу, чтобы openpxyl устанавливался как зависимость автоматически с помощью setuptools.
Я прочитал, что правильный способ сделать это - включить следующее в setup.py script:
setup(name='methpipe',
version=find_version("lala", "__init__.py"),
description='Utilities',
author='Jonathan T',
author_email='[email protected]',
url='https://git.com...',
packages=find_packages(),
install_requires=[
'openpxyl = 2.3.3',
],
scripts=["bin/submit_run_full.py"],
cmdclass=dict(install=my_install)
)
Итак, я упаковал свой модуль с помощью python setup.py sdist
, взял файл *.tar.gz, распаковал его, а затем запустил python setup.py install
, а openpyxl НЕ установлен!!!
Что я здесь делаю неправильно?
Ответы
Ответ 1
Попробуйте указать свою зависимость как в install_requires
, так и setup_requires
.
Ниже приведена документация setuptool
на https://pythonhosted.org/setuptools/setuptools.html
setup_requires
Строка или список строк, указывающих, какие другие дистрибутивы должны присутствовать для запуска установки script. setuptools попытаются их получить (даже если дойти до загрузите их с помощью EasyInstall), прежде чем обрабатывать остальные setup script или команды. Этот аргумент необходим, если вы используете расширения distutils как часть вашего процесса сборки; например, расширения, которые обрабатывают аргументы setup() и превращают их в EGG-INFO файлы метаданных.
(Примечание: проекты, перечисленные в setup_requires, НЕ будут автоматически установленный в системе, в которой запущена установка script. Они есть просто загружается в каталог. /.eggs, если они не локально уже имеется. Если вы хотите, чтобы они были установлены, а также доступный при запуске установки script, вы должны добавить их в install_requires и setup_requires.)
Ответ 2
Я замечаю, когда вы используете переопределение 'install' с ключом 'cmdclass'. Шаблон ниже также оставил мне неустановленные зависимости.
Custom_Install(install):
def run(self):
# some custom commands
install.run(self)
Добавление зависимостей в setup_requires у меня не сработало, поэтому в итоге я просто выполнил собственную установку pip в команде custom install..
def pip_install(package_name):
subprocess.call(
[sys.executable, '-m', 'pip', 'install', package_name]
)
Ответ 3
Сборка с помощью sdist создает дистрибутив исходного кода, поэтому я думаю, что обычные зависимости не поставляются с вашими исходниками