繁体   English   中英

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

[英]Inconsistent behaviour of bdist vs sdist when distributing a Python package

我有一个具有以下结构的大项目。 实用程序是小模块的集合,这些小模块在各个地方都可以由big_projectproject1,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却没有:

bdistproject1-0.1.linux-x86_64.tar.gz内容:

    /./usr/local/lib/python2.7/site-packages/
        |-- project1/
            |-- utilities
            |-- src
            |-- examples

sdistcontent of project1-0.1.tar.gz

    project1/
        |-- src/
        |-- examples/

因此sdist忽略了实用程序模块,而bdist将其包含在正确的位置。 为什么?

如果有人想看一下真实的项目: https ://testpypi.python.org/pypi/microscopy,其中bsdist和sdist存档都可用。

setuptools和distutils产生相同的结果。 因为该项目是纯Python,所以我宁愿使用sdist ...

似乎可行的一种方法是使用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

我建议更新您的MANIFEST.in文件以包含实用程序文件夹
例如,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM