【发布时间】:2015-02-20 13:35:15
【问题描述】:
说,我有 python 包 setup.py 有以下几行:
...
packages=['mypkg'],
data_files=[
('lib/mypkg/', [...]),
('share/mypkg/', [...]),
]
...
我假设将在$(prefix)/lib/mypkg 安装几个可执行帮助程序,并将与包相关的数据文件安装在$(prefix)/share/mypkg。关键是$(prefix) 在不同的发行版之间可能会有所不同。例如,我在 centos 系统上默认有prefix=/usr,在 debian 系统上默认有prefix=/usr/local。此外,据我所知,自定义前缀甚至自定义安装方案都可以作为 setup.py 参数提供。
所以,我希望能够使用我的包中的 python 代码严格确定我的包数据安装在哪里。目前我正在使用以下解决方案,但对我来说似乎很笨拙,我想在自定义安装方案的情况下效率会低下:
# mypkg/__init__.py
import os
initpath = __path__[0]
while True:
datapath, _ = os.path.split(initpath)
if datapath == initpath:
break
initpath, datapath = datapath, os.path.join(datapath, 'share', 'mypkg')
if os.path.exists(datapath):
print datapath
有没有更好的方法?
【问题讨论】:
标签: python packages setuptools prefix