我有一个
python项目,我们称之为foobar,项目根目录中有一个setup.py脚本,就像所有
Python项目一样.例如
> foobar
> setup.py
from ez_setup import use_setuptools use_setuptools() from setuptools import setup,find_packages setup( name='foobar',version='0.0.0',packages=find_packages(),install_requires=[ 'spam==1.2.3','eggs>=4.5.6',],)
我需要使用Python从该setup.py文件中获取依赖项信息.我想要的部分是
[ 'spam==1.2.3',]
在上面的例子中.我不想安装这个包,我只需要依赖项信息.当然,我可以使用正则表达式来解析它,但那会很难看,我也可以使用Python AST来解析它,但我认为应该已经有一些工具可以做到这一点.这样做的最佳方法是什么?
在我看来,你可以使用mock来完成工作(假设你已经安装了它并且你有所有的setup.py要求……).这里的想法是模拟setuptools.setup并检查它被调用的参数.当然,你真的不需要模拟这样做 – 你可以直接修补setuptools如果你想…
import mock # or `from unittest import mock` for python3.3+. import setuptools with mock.patch.object(setuptools,'setup') as mock_setup: import setup # This is setup.py which calls setuptools.setup # called arguments are in `mock_setup.call_args` args,kwargs = mock_setup.call_args print kwargs.get('install_requires',[])