[英]setup.py not installing data files
我有一个 Python 库,除了常规的 Python 模块外,还有一些数据文件需要放在 /usr/local/lib/python2.7/dist-package/mylibrary 中。
不幸的是,我一直无法说服 setup.py 在那里实际安装数据文件。 请注意,此行为处于安装状态 - 而不是 sdist。
这是 setup.py 的略微编辑版本
module_list = list_of_files
setup(name ='Modules',
version ='1.33.7',
description ='My Sweet Module',
author ='PN',
author_email ='email',
url ='url',
packages = ['my_module'],
# I tried this. It got installed in /usr/my_module. Not ok.
# data_files = [ ("my_module", ["my_module/data1",
# "my_module/data2"])]
# This doesn't install it at all.
package_data = {"my_module" : ["my_module/data1",
"my_module/data2"] }
)
这是在 Python 2.7 中(最终必须在 2.6 中运行),并且必须在 10.04 和 12+ 之间的某些 Ubuntu 上运行。 现在在 12.04 上开发它。
UPD : package_data
接受格式为{'package': ['list', 'of?', 'globs*']}
字典,因此要使其工作,应该指定相对于包目录的 shell globs,而不是相对于文件路径到分布根。
data_files
具有不同的含义,通常应避免使用此参数。
使用 setuptools 你只需要include_package_data=True
,但数据文件应该在版本控制系统下,setuptools知道(默认情况下它只识别CVS和SVN,如果你使用git或hg,安装setuptools-git
或setuptools-hg
hg...)
使用设置工具,您可以:
- 在 MANIFEST.im 中:
include my_module/data*
- 在 setup.py 中:
setup(
...
include_package_data = True,
...
)
http://docs.python.org/distutils/setupscript.html#installing-additional-files
如果 directory 是相对路径,则相对于安装前缀(Python 的 sys.prefix 用于纯 Python 包, sys.exec_prefix 用于包含扩展模块的包)进行解释。
这可能会做到:
data_files = [ ("my_module", ["local/lib/python2.7/dist-package/my_module/data1",
"local/lib/python2.7/dist-package/my_module/data2"])]
或者只是使用 join 添加前缀:
data_dir = os.path.join(sys.prefix, "local/lib/python2.7/dist-package/my_module")
data_files = [ ("my_module", [os.path.join(data_dir, "data1"),
os.path.join(data_dir, "data2")])]
以下解决方案对我来说效果很好。 您应该在 setup.py 所在的位置有 MANIFEST.in 文件。
将以下代码添加到清单文件中
recursive-include mypackage *.json *.md # can be extended with more extensions or file names.
另一种解决方案是将以下代码添加到 MANIFEST.in 文件中。
graft mypackage # will copy the entire package including non-python files.
global-exclude __pyache__ *.txt # list files you dont want to include here.
现在,当您执行 pip install 时,将包含所有必需的文件。
希望这可以帮助。
更新:确保您在安装文件中也有include_package_data=True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.