对于使用"setup.py"构建安装包的开发人员而言,这应该是一个非常常见的问题,应该先问过它,但我无法在任何地方找到合适的答案.
在setup.py中
from distutils.core import setup
setup(
....,
....,
data_files=[('MyApp/CBV', ['myapp/data/CBV/training.cbv', 'myapp/data/CBV/test.cbv'])],
....,
....,
)
Run Code Online (Sandbox Code Playgroud)
sudo python setup.py安装的结果
running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts
changing mode of /usr/local/bin/MyApp_trainer to 755
changing mode of /usr/local/bin/MyApp_reference_updater to 755
changing mode of /usr/local/bin/MyApp_predictor to 755
changing mode of /usr/local/bin/reference_updater to 755
running install_data
creating /usr/local/MyApp/CBV
copying MyApp/data/CBV/training.cbv -> /usr/local/MyApp/CBV
copying MyApp/data/CBV/test.cbv -> /usr/local/MyApp/CBV
running install_egg_info
Removing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Writing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Run Code Online (Sandbox Code Playgroud)
从使用上述结果的观察,"/ usr/local"是"data_files"根目录.除了硬编码,是否有任何Python函数可以给我这个"data_files"根目录?
Mar*_*ers 12
默认情况下,以root用户身份安装软件包时,列表中的相对目录名称将data_files根据sys.prefix(对于pure-python库)或sys.exec_prefix(对于具有已编译扩展名的库)的值进行解析,因此您可以根据该值检索文件.从distutils文档中进行测试:
如果directory是相对路径,则相对于安装前缀(Python的
sys.prefix纯Python包,sys.exec_prefix对于包含扩展模块的包)进行解释.
因此,对于您的示例,您将找到您的文件os.path.join(sys.prefix, 'MyApp', 'CBV').
但是,您最好使用setuptools扩展distutils并使用pkg_resources模块Resource API来加载数据文件.它就是setuptools出于这个目的.您确实希望包中包含的数据文件最佳.这意味着您不会使用data_files,而是设置include_package_data=True或列出文件模式package_data,请参阅setuptools文档中的包含数据文件.
然后,您可以直接从包中将这些资源文件加载到一个字符串中resource_string(),例如:
from pkg_resources import resource_string
foo_config = resource_string(__name__, 'foo.conf')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7349 次 |
| 最近记录: |