我有一个具有以下结构的大项目。 实用程序是由 big_project , project1 ,2等的不同组件在各个地方重复使用的小模块的集合。
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 ,包括实用程序(因为我不想单独分发实用程序)。分布式软件包具有以下结构:
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 ......
答案 0 :(得分:0)
似乎有用的一种方法是使用 bdist_wheel ,尽管它的名称在内容为纯Python时产生了与平台无关的源代码分发。而车轮则被认为是新标准。
setup.py
还需要告知根包project1
,否则project1.__init__.py
丢失:
setup(
name = 'project1',
packages = ['project1'
'project1.utilities',
'project1.src',
'project1.examples'],
package_dir = {'project1': '.',
'project1.utilities': '../utilities/',
'project1.src': 'src',
'project1.examples': 'examples'}
)
然后
python2.7 setup.py bdist_wheel
答案 1 :(得分:0)
我建议您更新MANIFEST.in文件以包含实用程序文件夹
例如 recursive-include ../utilities *