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 создает дистрибутив исходного кода, поэтому я думаю, что обычные зависимости не поставляются с вашими исходниками