我看过这里:
如何让 setup.py 使用文件的相对路径?
在这里:
python distutils 不包含 data_files
这里:
对 setup.py 中的 package_dir 和 packages 设置感到困惑
却找不到爱。
我怀疑 distutils 不支持我尝试使用的目录结构,但希望得到有关如何改进的确认和/或建议。
我有以下目录结构:
/src
├── user
├── admin
│ ├── admin.py
│ ├── LICENSE.txt
│ ├── MANIFEST
│ ├── MANIFEST.in
│ ├── README.txt
│ └── setup.py
└── lib
├── __init__.py
├── __init__.pyc
├── rcodes.py
├── rcodes.pyc
├── validation.py
└── validation.pyc
其中 src 中的几个项目依赖于 lib 包。但是,当尝试在 /src/admin 中运行 setup.py 时,我无法将 lib 目录包含在最终包中(使用 setup.py sdist)。
Setup.py如下: 从 distutils.core 导入设置
setup(
name='admin_server',
version='0.0.0',
author='Instamrkt',
author_email='[email protected]',
url='http://instamrkt.com',
description='Instamrkt Admin Server',
packages=['lib'],
package_dir = {'lib': '../lib'},
py_modules = [
'admin',
'lib.rcodes',
'lib.validation'
],)
其产量:
[foozle@ip-172-31-36-251 admin]$ python setup.py sdist
running sdist
running check
reading manifest template 'MANIFEST.in'
writing manifest file 'MANIFEST'
creating admin_server-0.0.0
making hard links in admin_server-0.0.0...
hard linking README.txt -> admin_server-0.0.0
hard linking admin.py -> admin_server-0.0.0
hard linking setup.py -> admin_server-0.0.0
Creating tar archive
removing 'admin_server-0.0.0' (and everything under it)
[foozle@ip-172-31-36-251 admin]$ tar tzf ./dist/admin_server-0.0.0.tar.gz
admin_server-0.0.0/
admin_server-0.0.0/PKG-INFO
admin_server-0.0.0/admin.py
admin_server-0.0.0/setup.py
admin_server-0.0.0/README.txt
缺少软件包库。
为了明确起见,我希望在包中保留相同的目录结构,以便我可以在不同应用程序的多个发行版中使用 lib。
谢谢!
当使用 package_dir 选项指向上游目录('../lib')时,您无法创建源代码分发,因为 sdist 会按原样复制整个源代码树,而 '../lib' 最终会超出建树。
但是,您可以创建二进制发行版:
python setup.py bdist
或者,如果使用安装工具:
python setup.py bdist_wheel
如果您的模块是纯 Python,后者的优点是可以创建与系统无关的发行版。
您可以扩展默认的 sdist 命令并覆盖复制文件的方法。
检查 make_distribution() 和 make_release_tree()
class rel_sdist(sdist):
pass
setup(
...
cmdclass={'sdist': rel_sdist},
)