鉴于setup.py
如下:
from distutils.core import setup
setup(
name = 'TestApp',
version = '0.0.1',
author = 'saaj',
py_modules = ['app'],
test_suite = 'test'
)
对于一些脚本和自动化,无需安装包,其中pip
,easy_install
甚至setuptools
不读取所有元数据提供命令行选项或公共API(如test_suite
),这里有一个小哈克的方式:
python3 -c "import sys, types; m = types.ModuleType('distutils.core'); \
m.setup = lambda **kwargs: print(kwargs); \
sys.modules['distutils.core'] = m; import setup"
这将打印传递给setup()
关键字参数的dict
。
{'author': 'saaj', 'version': '0.0.1', 'name': 'TestApp',
'test_suite': 'test', 'py_modules': ['app']}
您可以替换lambda
到你需要的任何输出print
。如果您的setup.py
从setuptools
进口setup()
,这实际上是推荐的方式,只需替换“distutils。。核心”与‘中的片段setuptools的’
格式化片断如下:
import sys
import types
m = types.ModuleType('distutils.core')
m.setup = lambda **kwargs: print(kwargs)
sys.modules['distutils.core'] = m
import setup # import you setup.py with mocked setup()
不幸的是,我没有'现在安装pip',所以无法测试它的'pkg_resources.get_distribution'。做法似乎并没有工作,要么因为这是通过一个简单的'蟒蛇setup.py build'安装一个扩展在这种情况下,我得到一个'DistributionNotFound:。foo'例外 – dastrobu
蟒蛇setup.py构建不安装使用 –
。 '的增加pip'在进口时的巨大延迟,并增加了大量的内存占用自己的代码它在内部又是用'pkg_resources'和渔网你相同的结果。基本上,这里'是pip'无关和误导“的解决方案”。答案也没有得到所需的信息;从'Distribution'对象这是非常不明显的如何获取版本,作者和描述,其中包括其他领域,退了出去。 'pkg._get_metadata(pkg.PKG_INFO)'让你从元数据文件中的各行作为一个列表,对于初学者。 – amcgregor