【发布时间】:2016-02-19 17:12:48
【问题描述】:
我有一个具有以下结构的大项目。 utilities 是由 big_project、project1、2 等的不同组件在各个地方重用的小模块的集合。 p>
big_project/
|-- __init__.py
|-- utilities/
|-- mod1.py
|-- mod2.py
|-- project1/
|-- setup.py
|-- __init__.py
|-- src/
|-- __init__.py
|-- mod1.py
|-- mod2.py
|-- examples/
|-- __init__.py
|-- mod.py
|-- project2/
|-- ...
|-- project3/
|-- ...
我想分发project1,包括utilities(因为我不想单独分发utilities)。分发包将具有以下结构:
project1/
|-- utilities/
|-- src/
|-- examples/
而project1/setup.py 看起来像这样:
setup(
name = 'project1',
packages = ['project1.utilities', 'project1.src', 'project1.examples'],
package_dir = {'project1.utilities': '../utilities/',
'project1.src': 'src',
'project1.examples': 'examples'}
)
问题:python setup.py bdist 生成具有正确结构的分布,但 python setup.py sdist 没有:
bdist:project1-0.1.linux-x86_64.tar.gz的内容:
/./usr/local/lib/python2.7/site-packages/
|-- project1/
|-- utilities
|-- src
|-- examples
sdist:content of project1-0.1.tar.gz:
project1/
|-- src/
|-- examples/
所以 sdist 省略了实用程序模块,而 bdist 将它包含在正确的位置。为什么?
如果有人想查看真实项目:https://testpypi.python.org/pypi/microscopy,其中 bsdist 和 sdist 存档都可用。
setuptools 和 distutils 产生相同的结果。因为项目是纯Python,我宁愿用sdist...
【问题讨论】:
-
我现在已经达到了这个水平。看起来 sdist 命令从字面上处理 setup.py 中的相对路径。如果您查看 setyp.py sdist 的控制台日志,您会看到通过 .. 引用的子目录被复制到 build/.. 中!!!因此它们不包含在最终的 tar 或 zip 中。惊人的。我们应该提交错误吗?
标签: python setuptools distutils setup.py