【发布时间】:2016-07-11 06:44:14
【问题描述】:
我正在使用 setuptools 和 pkg_resources 开发一个包 P,
安装包后,需要下载一些二进制文件并将它们放在专用目录中(P/bin/)。
我正在尝试使用pkg_ressources.resource_filename 来获取绝对目录路径。 (为了使用 virtualenv)
在使用python setup.py install 安装期间,pkg_ressources.resource_filename 不会返回
/home/user/tests/venv/lib/python3.4/site-package/P/bin/ 之类的路径,但实际模块的路径,例如 /home/user/projects/P/P/bin/。
这是个问题,因为我需要安装目录(在 virtualenv 中),而不是我的个人项目目录(我开发模块的地方)。
如果我尝试通过 pypi,使用 pip install module,pkg_ressources.resource_filename 返回的目录是像 /tmp/pip-build-xxxxxxx/P/bin/ 这样的临时文件,这又不是放置二进制文件的地方。
这是我的 setup.py:
from setuptools import setup
import os
from setuptools.command.install import install as _install
from pkg_resources import resource_filename
def post_install():
"""Get the binaries online, and give them the execution permission"""
package_dir_bin = resource_filename('P', 'bin') # should be /home/user/tests/venv/lib/python3.4/site-package/P/bin/
# package_dir_bin = resource_filename(Requirement.parse('P'), 'bin') # leads to same results
put_binaries_in(package_dir_bin)
os.system('chmod +x ' + package_dir_bin + '*')
class install(_install):
# see http://stackoverflow.com/a/18159969
def run(self):
"""Call superclass run method, then downloads the binaries"""
_install.run(self)
self.execute(post_install, args=[], msg=post_install.__doc__)
setup(
cmdclass={'install': install},
name = 'P',
# many metadata
package_dir = { 'P' : 'P'},
package_data = {
'P' : ['bin/*.txt'] # there is an empty txt file in bin directory
},
)
安装过程中是否有标准的方式获取安装目录,跨平台兼容python 2和3? 如果没有,我该怎么办?
【问题讨论】:
标签: python setuptools packaging pkg-resources