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,则后者具有创建与系统无关的发行版的优势。