分发Python包时bdist vs sdist的行为不一致

时间:2016-02-19 17:12:49

标签: python setuptools distutils setup.py

我有一个具有以下结构的大项目。 实用程序是由 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 ......

2 个答案:

答案 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 *