我正在查看一個開源軟件包(MoviePy),它根據安裝的軟件包調整其功能。例如,要調整圖像大小,將使用OpenCV提供的功能,否則使用PIL/pillow,否則使用SciPy。如果沒有可用的,它將優雅地回退到不支持調整大小。我可以在setup.py的tests_require中使用環境標記嗎?
setup.py
函數標識tests_require
參數中的一些可選依賴關係,因此可以運行測試。
但是,還有一層複雜性尚未處理。某些可選軟件包不適用於支持的所有平臺版本。 (我認爲一個例子是他們使用的OpenCV版本不適用於Windows 3.3的Python 3.3,但是如果這是錯誤的請不要掛斷電話,我正在尋找一般的解決方案。)
解決方案將出現要使用environment markers,根據哪個Python版本和哪個操作系統指定應安裝哪些版本的軟件包。我可以用requirements.txt
文件來做到這一點。我想我可以用Conda來做到這一點(使用不同的格式 - 冒號而不是分號)。但我如何在setup.py中執行此操作?
我迄今的實驗都失敗了。
例如:把環境標誌的包版本後,用分號:
requires = [
'decorator>=4.0.2,<5.0',
'imageio>=2.1.2,<3.0',
'tqdm>=4.11.2,<5.0',
'numpy',
]
optional_reqs = [
"scipy>=0.19.0,<1.0; python_version!='3.3'",
"opencv-python>=3.0,<4.0; python_version!='2.7'",
"scikit-image>=0.13.0,<1.0; python_version>='3.4'",
"scikit-learn; python_version>='3.4'",
"matplotlib>=2.0.0,<3.0; python_version>='3.4'",
]
doc_reqs = [
'pygame>=1.9.3,<2.0',
'numpydoc>=0.6.0,<1.0',
'sphinx_rtd_theme>=0.1.10b0,<1.0',
'Sphinx>=1.5.2,<2.0',
] + optional_reqs
test_reqs = [
'pytest>=2.8.0,<3.0',
'nose',
'sklearn',
'pytest-cov',
'coveralls',
] + optional_reqs
extra_reqs = {
"optional": optional_reqs,
"doc": doc_reqs,
"test": test_reqs,
}
然後在通話設置,參數是:
tests_require=test_reqs,
install_requires=requires,
extras_require=extra_reqs,
當我建立這個上特拉維斯,Python 3.6.2,PIP 9.0.1:
> python setup.py install
error in moviepy setup command: 'extras_require' requirements cannot include environment markers, in 'optional': 'scipy<1.0,>=0.19.0; python_version != "3.3"'
我可以指定en環境標記爲tests_require
in setup.py
?
這不是我的專業領域。但是,其他人可能會善意地看到你的一些失敗的實驗。 – Prune
另外,爲什麼不使用'requirements.txt'足夠? – larsks
@larsks:他們服務於不同的目的。 Setup.py是您的購物清單。 Requirements.txt是您的裝箱單。 (我記得它的'安裝文件包含你的要求,而需求文件包含你的設置') – Oddthinking