При создании пакета Python и его загрузке в pypi
он автоматически установит требования, указанные в файле setup.py
в install_requires
, например,
from distutils.core import setup
setup(
name = 'a_package',
packages = ['a_package'],
install_requires=['another_package']
)
Если пакет имеет расширение cython (и файлы .pyx
вместо файлов .c
/ .cpp
), файл setup.py
необходимо будет импортировать в cython для создания устанавливаемого расширения, например,
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
name = 'a_package',
packages = ['a_package'],
install_requires=['another_package'],
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension('the_extension', sources=['a_file.pyx'])]
)
Но поскольку Cython импортируется до выполнения части setup
, при попытке установить этот пакет через pip
из источника (а не из колеса), загруженного из pypi
, он не сможет быть установлен из-за отсутствия возможность импортировать cython
, так как он еще не достиг части с требованиями.
Мне интересно, что можно сделать, чтобы при установке pip
этого пакета из pypi
была установлена cython
, прежде чем он попытался импортировать его. Добавление requirements.txt
с cython
, по-видимому, не добавляет требований к автоматической установке для файлов, загруженных с pypi
.
Теперь я понимаю, что можно просто pip install cython
до pip install thispackage
, но мне интересно, есть ли лучшее исправление, которое позволило бы устанавливать пакет вместе с Cython непосредственно из pypi
, когда невозможно запустить дополнительная команда (не прибегая к загрузке файлов .c.
и настройке файла setup.py
для их использования вместо .pyx
).