从 setup.py 中检测 python 包安装路径

2024-03-23

安装后,我想对安装创建的一些配置和数据文件进行软链接。

如何确定从包的 setup.py 中安装的新包文件的位置?

我最初对路径“/usr/local/lib/python2.7/dist-packages”进行了硬编码,但当我尝试使用虚拟环境时,该路径被破坏了。 (由 virtualenv 创建。)

我尝试了 distutils.sysconfig.get_python_lib(),它在 virtualenv 中工作。然而,当安装在真实系统上时,它返回“/usr/lib/python2.7/dist-packages”(注意“local”目录不存在。)

我也尝试过 site.getsitepackages():

从基础环境运行 Python shell:

导入站点

site.getusersitepackages()

'/home/sarah/.local/lib/python2.7/site-packages'

site.getsitepackages()

['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

从虚拟环境“testenv”运行 Python shell:

导入站点

site.getsitepackages()

回溯(最近一次调用最后一次):

文件“”,第 1 行,位于

AttributeError:“模块”对象没有属性“getsitepackages”

我在 Ubuntu 上运行“Python 2.7.3(默认,2012 年 8 月 1 日,05:14:39)”和“[GCC 4.6.3] on linux2”。我可能可以将一些东西与 try- except 块拼凑在一起,但似乎应该有一些由 distutils / setuptools 设置/返回的变量。 (我不知道要使用哪个分支,只要它有效即可。)

Thanks.


我还没有找到“正确”的方法,但我发现了一些看起来几乎正确的技巧。一种方法仅适用于安装;另一个仅在已安装软件包的情况下才有效。

对于安装,我使用返回的对象setuptools.setup():

from setuptools import setup
s = setup([...])
installation_path = s.command_obj['install'].install_lib

(这仅在安装期间有效,因为您需要有效的Distribution这些属性存在的对象。 AFAIK,获得这样一个对象的唯一方法是运行setup().)

卸载时,我使用file包的属性,如上面@Zhenya 所建议的。唯一的问题是当我跑步时./setup.py uninstall摆脱package,我通常有目录./package/, ./build, ./dist, and ./package.egg-info/。 (我的代码捕获了“卸载”选项,而无需调用 setup()。它运行手动创建的脚本来删除包文件。)这些可以将 python 解释器重定向到除我所在的全局可访问存储库之外的某个位置试图摆脱。这是我处理这个问题的技巧:

import imp
import sys
from subprocess import Popen
from os import getcwd
Popen('rm -r build dist *.egg-info', shell=True).wait()
oldpath = sys.path
rundir = getcwd()
sys.path.remove(rundir)
mod = imp.find_module(PACKAGE)
p = imp.load_module(PACKAGE, mod[0], mod[1], mod[2])
sys.path = oldpath
installation_path = p.__file__

(这在安装过程中不起作用,因为 - 我认为 - Python 仅在启动时清点模块,因此 find_module() 不会找到刚刚安装的包,除非你退出 python 并返回。)

我已经在裸环境和虚拟环境(来自 virtualenv 1.9.1)上测试了安装和卸载。我正在运行 Ubuntu 12.04 LTS、Python 2.7.3、setuptools 0.6c11(在裸环境中)和 setuptools 0.7.4(在 virtualenv 中)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 setup.py 中检测 python 包安装路径 的相关文章

随机推荐