Python distutils设置package_dir的相对路径

4
我在这里查看了:
如何让我的setup.py使用相对路径到我的文件?
还有这里:
python distutils不包含data_files

还有这里:
Confused about the package_dir and packages settings in setup.py 但都没有找到合适的答案。

我怀疑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 setup

setup(
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个回答

2

如果使用 package_dir 选项指向上游目录('../lib'),则无法创建源分发,因为 sdist 将按原样复制整个源树,而 '../lib' 最终会在构建树之外。

但是,您可以创建二进制分发:

python setup.py bdist

或者,如果使用setuptools:

python setup.py bdist_wheel

后者的优点是,如果你的模块是纯Python的,那么它可以创建一个与系统无关的分发。

0
你可以扩展默认的sdist命令,并覆盖复制文件的方法。
请检查make_distribution()和make_release_tree()函数。
class rel_sdist(sdist):
    pass

setup(
    ...
    cmdclass={'sdist': rel_sdist},
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接