Python distutils 设置 package_dir 的相对路径
我在这里查过:
如何让我的setup.py使用相对路径来访问我的文件?
还有这里:
python distutils没有包含数据文件
还有这里:
对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的内容如下:
from distutils.core import setupsetup(
name='admin_server',
version='0.0.0',
author='Instamrkt',
author_email='info@instamrkt.com',
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缺失。
为了明确,我希望在包中保留相同的目录结构,这样我就可以在不同的应用程序中使用lib进行多个分发。
谢谢!
2 个回答
0
你可以扩展默认的sdist命令,并重写那些负责复制文件的方法。
可以查看make_distribution()和make_release_tree()这两个函数。
class rel_sdist(sdist):
pass
setup(
...
cmdclass={'sdist': rel_sdist},
)
2
当你使用package_dir选项指向一个上级目录(比如'../lib')时,无法创建源代码分发包,因为sdist会直接复制整个源代码树,而'../lib'会被放在构建目录之外。
不过,你可以创建一个二进制分发包:
python setup.py bdist
或者,如果你使用setuptools的话:
python setup.py bdist_wheel
后者的好处是,如果你的模块是纯Python的,它会创建一个与系统无关的分发包。