У меня есть setup.py
, который выглядит так:
from setuptools import setup
from subprocess import call
from setuptools.command.install import install
class MyInstall(install):
def run(self):
call(["pip install -r requirements.txt --no-clean"], shell=True)
install.run(self)
setup(
author='Attila Zseder',
version='0.1',
name='entity_extractor',
packages=['...'],
install_requires=['DAWG', 'mrjob', 'cchardet'],
package_dir={'': 'modules'},
scripts=['...'],
cmdclass={'install': MyInstall},
)
Мне нужно MyInstall
, потому что я хочу установить некоторые библиотеки из github, и я не хотел использовать параметр dependency_links
, потому что он обескуражен (например здесь), поэтому я могу сделать это с требованиями .txt.
Когда я устанавливаю этот пакет с помощью pip
, все работает нормально, но по некоторым причинам я должен решить это так, чтобы он также работал с чистым python setup.py install
. И это не так.
При переопределении cmdclass
в setup()
с моим собственным классом install_requires
, похоже, игнорируется. Как только я прокомментирую эту строку, эти пакеты устанавливаются.
Я знаю, что install_requires не поддерживается, например, в distutils (если я хорошо помню), но он находится в setuptools. И тогда cmdclass
не повлияет на install_requires
.
Я много часов искал эту проблему, нашел много родственных ответов на stackoverflow, но не для этой конкретной проблемы.
Приложив все необходимые пакеты к требованиям .txt, все работает нормально, но я хотел бы понять, почему это происходит. Спасибо!