У меня есть 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, все работает нормально, но я хотел бы понять, почему это происходит. Спасибо!