从 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 包安装路径 的相关文章

  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐