Python distutils为package_dir设置相对路径

Python distutils setup relative paths for package_dir

我看过这里:
如何获取setup.py以使用文件的相对路径?
和这里:
python distutils不包含data_files

和这里:
对setup.py中的package_dir和程序包设置感到困惑
但没有找到爱

我怀疑distutils不支持我尝试使用的目录结构,但希望确认和/或提出改进建议。

我有以下目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/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导入设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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'
],)

产生:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[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。

谢谢!


使用package_dir选项指向上游目录('../lib')时,无法创建源分发,因为sdist将按原样复制整个源树,并且'../lib'最终不在构建外部 树。

但是,您可以创建一个二进制发行版:

1
python setup.py bdist

或者,如果使用setuptools:

1
python setup.py bdist_wheel

如果您的模块是纯Python,则后者具有创建与系统无关的发行版的优势。