我有一个 python 包,我想像这样组织:
root/
setup.py
package1/
__init__.py
package2/
__init__.py
package3/
__init__.py
我希望 setup.py
将 package1
、package2
和 package3
安装到正确的 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/