python - 如何让setup.py安装多个顶级包?

标签 python build installation setuptools distutils

我有一个 python 包,我想像这样组织:

root/
    setup.py
    package1/
        __init__.py
        package2/
            __init__.py
        package3/
            __init__.py

我希望 setup.pypackage1package2package3 安装到正确的 site-packages/ 目录作为顶级包,以便我可以执行

import package1
import package2
import package3

没问题。也许这需要多个 setup.py 文件?

但最重要的是,我希望最终能够通过执行 pip install root 安装所有三个软件包。我该怎么做呢?最好是仅限 distutils 的解决方案,尽管 setuptools 也可以。

最佳答案

你可以试试

packages=['package1', 'package2', 'package3'],
package_dir={
    'package2': 'package1',
    'package3': 'package1',
},

告诉 distutils 包 2 和 3 位于 package1 内。

完整的工作 setup.py 可能如下所示:

#!/usr/bin/env python

from distutils.core import setup

setup(name='root',
      version='1.0',
      description='Root package',
      author='Me',
      author_email='me@example.org',
      url='https://example.org/root',
      packages=['package1', 'package2', 'package3'],
      package_dir={
          'package2': 'package1',
          'package3': 'package1',
      },
)

python -m pip install ./root 将软件包安装到您寻找的结构中,这样

import package1
import package2
import package3

工作。

作为证明,这就是 ls package* 在 site-packages 目录中的样子:

package1:
__init__.py __pycache__

package2:
__init__.py __pycache__

package3:
__init__.py __pycache__

这是root-1.0.dist-info/RECORD 文件:

package1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
package1/__pycache__/__init__.cpython-37.pyc,,
package2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
package2/__pycache__/__init__.cpython-37.pyc,,
package3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
package3/__pycache__/__init__.cpython-37.pyc,,
root-1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
root-1.0.dist-info/METADATA,sha256=Z1crlNNrRhJwO6O2ujtNsCo9rURrPoZGE0--ZhuBZsU,190
root-1.0.dist-info/RECORD,,
root-1.0.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
root-1.0.dist-info/top_level.txt,sha256=svjaZCiNfClr21KxGb71MTR7bWON1-VZRPiPgM0FjV4,27

关于python - 如何让setup.py安装多个顶级包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15966354/

相关文章:

使用 Bitbucket 的 Flutter 管道

包含数据文件的 Python 包

ruby-on-rails - 如何从头开始我的 Ruby 环境?

python - 是否可以在线性模型中手动设置参数并获得 R 平方等?

python - 返回字典中元组键给定元素的最大值

python - 在 sklearn 中确定 SVM 分类器的最有贡献的特征

C# nant 使用 .csproj 文件构建

xcode - 您可以从命令行而不是在 Xcode 中创建 Mac .app 发行版吗?

python 3.4.3 64bit 无法运行此安装所需的程序

c++ - 如何实现在线裁判机器人?(例如TopCoder、Uva、ACM-ICPC)