[英]How to reference a variable defined in setup.py?
我有以下setup.py
:
import itertools
dependencies = {
'minimal': ['numpy', 'requests'],
'option-a': ['scipy'],
'option-b': ['matplotlib']
}
setup(
install_requires=dependencies['minimal'], # minimal dependencies
extras_require={
'all': list(itertools.chain(*dependencies.values())), # all dependencies included
**{k: v for k, v in dependencies.items() if k != 'minimal'}, # each extra dependency group
},
# other setup parameters omitted
)
我使用變量dependencies
項來避免重復依賴項列表並使其易於維護。 這似乎是個好方法。
我想寫一個 function verify_optional_extras('option-a')
來檢查是否安裝了option-a
extras 的包。
如果我可以訪問setup.py
中定義的dependencies
變量,我可以輕松地為這些包編寫驗證 function。
這個問題的可能答案:
setup.py
中的dependencies
項。 如果您想從已安裝的 package 中訪問信息,那么您不應嘗試直接訪問setup.py
源,因為它實際上並不存在。 一旦您的代碼安裝到站點包中,安裝程序即setup.py
文件本身就消失了。 您可以從開發源代碼樹中訪問它,例如 git 簽出,但當您的 package 被其他人安裝和使用時,情況就不一樣了。
對於 wheel 安裝,首先在.whl
文件中甚至沒有setup.py
。 就一個zip的文件,解壓看看吧! 但是缺少setup.py
即使在源代碼分發安裝 ( mypkg-1.0.tar.gz
) 或從 pip 安裝的任何東西(它首先構建一個 wheel 文件然后安裝 wheel)的情況下也是如此。
相反,您將需要這樣的東西,以從 package 元數據訪問依賴項數據:
# from within your my_module:
from importlib.metadata import requires
reqs = requires(__package__)
結構有點不同,因此您可能需要將其解析回字典,但所有信息都在那里:
>>> requires("mypkg")
['numpy',
'requests',
'numpy; extra == "all"',
'requests; extra == "all"',
'scipy; extra == "all"',
'matplotlib; extra == "all"',
'scipy; extra == "option-a"',
'matplotlib; extra == "option-b"']
這些是需求行,如果您在 go 驗證可選的 deps 安裝時需要解析它們的工具,那么您可以使用打包模塊:
>>> from packaging.requirements import Requirement
>>> req = Requirement('scipy >= 1.6; extra == "option-a"')
>>> req.name
'scipy'
>>> req.specifier
<SpecifierSet('>=1.6')>
>>> "1.7.3" in req.specifier
True
>>> "1.5" in req.specifier
False
>>> req.marker
<Marker('extra == "option-a"')>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.