Python:pip在root目录中安装子包

Vla*_*nco 4 python distutils pip setuptools

我有这样的结构:

setup.py
package
    __init__.py
    sub_package
        ___init__.py
    sub_package2
        __init__.py
Run Code Online (Sandbox Code Playgroud)

如果我通过setup.py install安装软件包,那么它可以正常工作(通过将整个软件包复制到site-packages目录):

site_packages
    package
        sub_package
        sub_package2
Run Code Online (Sandbox Code Playgroud)

但是如果我运行pip install package,那么pip会将每个子包安装为独立的包:

site-packages
    package
    sub_package
    sub_package2
Run Code Online (Sandbox Code Playgroud)

我怎么能避免这个?我使用setuptools中的find_packages()来指定包.

mou*_*uad 7

注意:此答案不再有效,仅保留历史原因,现在正确的答案是使用setuptools,更多信息https://mail.python.org/pipermail/distutils-sig/2013-March/020126. HTML


首先,我建议删除setuptools:

替代文字

并使用distutils(这是分发Python包标准机制)或分发你也有distutils2但我认为还没有准备好,而且这里的新标准是如何编写setup.py的指南.

对于你的问题,distutils中find_packages()不存在,你必须像这样添加你的包:

setup(name='package',
      version='0.0dev1',
      description='blalal',
      author='me',
      packages=['package', 'package.sub_package', 'package.sub_package2'])
Run Code Online (Sandbox Code Playgroud)

如果你有很多包和子包,你将不得不制作一些创建包列表的代码,是Django源代码的一个例子.

我认为使用distutils可以帮助你解决问题,我希望这可以帮助:)