У меня есть 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
, потому что это не рекомендуется (например, здесь), поэтому я могу сделать это с помощью requirements.txt.
Когда я устанавливаю этот пакет с pip
, все работает нормально, но по некоторым причинам я должен решить это так, чтобы он работал и с чистым python setup.py install
. И это не так.
При переопределении cmdclass
в setup()
моим собственным классом install_requires
, похоже, игнорируется. Как только я закомментирую эту строку, эти пакеты будут установлены.
Я знаю, что install_requires не поддерживается, например, в distutils (если я хорошо помню), но он есть в setuptools. И тогда cmdclass
не окажет никакого влияния на install_requires
.
Я часами гуглил эту проблему, нашел много похожих ответов на stackoverflow, но не для этой конкретной проблемы.
С размещением всех необходимых пакетов в файле requirements.txt все работает нормально, но я хотел бы понять, почему это происходит. Спасибо!