关于 PYTHONPATH 的 Python 2.x 多版本问题

2023-12-06

系统中安装了Python 2.6。

现在我想使用Python 2.7中引入的模块。因为我没有root权限,所以我在我的主目录($HOME/local/)下构建并安装了2.7

我将以下内容添加到我的 $HOME/.bashrc 中:

export PATH=$HOME/local/bin:$PATH
export PYTHONPATH=$HOME/local/lib/python2.7:$PYTHONPATH

现在我遇到了两个问题,想请教解决方法。

1.调用Python 2.7

新安装的Python 2.7在系统库路径(/usr/lib/python2.6/site-packages/)中找不到2.6模块。

我应该手动将其添加到 PYTHONPATH 吗?有更好的解决方案吗?

2.调用Python 2.6

Python 2.6 在启动时抱怨:

'import site' failed; use -v for traceback

我猜它正在尝试加载 2.7 模块(在 $HOME/local/lib/python2.7 中)。 调用Python 2.6时是否可以只加载2.6模块?

Thanks.


1)调用python 2.7

简而言之:不要这样做。 路径被称为“/usr/lib/python*”是有原因的2.6*/站点包/'。

原因之一是,此目录中通常存储“编译的”Python 文件 (.pyc)。 python 2.6 和 python 2.7 .pyc 文件不兼容:

$ python2.7 /usr/lib/python2.6/sitecustomize.pyc
RuntimeError: Bad magic number in .pyc file

python 将跳过它无法理解的 pyc 文件,但您至少会失去预编译文件的好处。

另一个原因是,事情可能会变得混乱:

$ strace -f python2.7 /usr/lib/python2.6/sitecustomize.py
...
stat("/etc/python2.6", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/etc/python2.6", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/etc/python2.6/apport_python_hook", 0x7fffa15601f0) = -1 ENOENT (No such file or directory)
open("/etc/python2.6/apport_python_hook.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/python2.6/apport_python_hookmodule.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/python2.6/apport_python_hook.py", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/python2.6/apport_python_hook.pyc", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/python2.7/apport_python_hook", 0x7fffa15601f0) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/apport_python_hook.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/apport_python_hookmodule.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/apport_python_hook.py", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/python2.7/apport_python_hook.pyc", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/python2.7/plat-linux2/apport_python_hook", 0x7fffa15601f0) = -1 ENOENT (No such file or directory)
...

在你的情况下,我会在 python2.7 目录中安装 python 2.7 所需的模块。

2)调用python 2.6

您可能想查看手册页中描述 PYTHONHOME 的部分:

PYTHONHOME:更改标准 Python 库的位置。默认情况下,在 ${prefix}/lib/python[version] 和 ${exec_prefix}/lib/python[version] 中搜索库,其中 ${prefix} 和 ${exec_prefix} 是与安装相关的目录,均默认到 /usr/local

您可以将 python 2.7 特定文件/模块存储在本地安装的相应目录中。仅当您运行特定版本的 python 时,才会拾取这些文件/模块。在这种情况下,您不得设置 PYTHONPATH(或 PYTHONHOME)。

注意:这正是 Debian(也许还有其他发行版)管理不同同时安装的 python 版本的方式。

[编辑:收到 niboshi 的评论后添加了第 1 节。]

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

关于 PYTHONPATH 的 Python 2.x 多版本问题 的相关文章

随机推荐

  • 如何在 HDP 3.1 中不使用仓库连接器的情况下从 Spark 将表写入 Hive

    当尝试在 HDP 3 1 上使用 Spark 2 3 写入 Hive 表时 无需使用仓库连接器直接写入 Hive 模式 spark shell driver memory 16g master local 3 conf spark hado
  • Firebase 规则:动态授予特定用户访问权限

    我正在构建一个 Android 应用程序 它需要我为用户存储一些图片 假设我有 2 个用户 A 和 B 他们应该能够读取 写入其特定文件夹 用户 A 可以读取和写入存储桶 images userA 用户 B 可以读取和写入存储桶 image
  • 选择下拉宽度 - Chrome 问题

    我想控制
  • unset 和 = null 之间的区别

    From a 随机 php net 帖子 如果你正在做 whatever null 那么你正在重写变量的 数据 您可能会更快地释放 缩小内存 但它可能会窃取 CPU 更快地从真正需要它们的代码中循环 从而产生 整体执行时间更长 显然这是无可
  • 使用 React Native 和 Tensorflow.js 对实时视频源进行预测

    我已经设置了我的 React Native 应用程序 所有 unimodules 和包的安装和配置都按预期工作 没有依赖性等问题 现在我想实现一个我从谷歌的可教机器上训练的张量流模型 但我无法理解如何将它与相机一起使用 因为我想实时处理帧
  • 如何使用Python解压gz文件

    我需要将从 FTP 站点下载的 gz 文件提取到本地 Windows 文件服务器 我已经为文件的本地路径设置了变量 并且我知道它可以被 GZIP muddle 使用 我怎样才能做到这一点 GZ 文件内的文件是 XML 文件 import g
  • 如何使 jQuery UI 选项卡出现在页面底部

    有没有办法让 jQuery UI 选项卡小部件选项卡出现在页面底部 使用 jQuery 站点中的示例
  • WebRTC 远程视频流不工作

    我添加了一个简单的 webRTC 应用程序 它将浏览器窗口连接到自身 从我的相机流式传输视频数据 最终目标是在页面上获取两个视频流 一个直接来自摄像头 另一个来自浏览器本地建立的 WebRTC 连接 不幸的是 远程视频流没有显示 知道为什么
  • 当我尝试测试我的应用程序时,Eclipse 无法识别我的 Android 平板电脑?

    最近我买了一台新的 Android 平板电脑 一款无名的中国平板电脑 我想测试我正在其上开发的应用程序 但是 当我尝试通过 Eclipse 运行它时 它无法识别我的平板电脑 平板电脑上启用了调试模式 当我看到选择设备对话框时 序列号 AVD
  • 使用角材料5上传文件

    我尝试使用角度材料 5 上传文件 角度 5 应用程序组件 html
  • 如何调试图表包“没有名为“plot”的模块”错误

    我正在一台 Windows 机器上使用 Anaconda 套件中的 Python3 和 IPython 笔记本 我跑了一个 pip install charts 安装软件包 我试图通过一些灵活和交互式的图表找到我的方法 任何建议表示赞赏 安
  • 使用 CMakeExternalProject_Add 构建 mongo-cxx-driver

    我正在尝试建立mongo cxx driver在基于 CMake 的项目中 该项目应该在 Windows macOS 和 ubuntu 容器中构建 我想确保所有这些平台上的软件将使用相同的驱动程序版本 因此我无法通过以下方式安装驱动程序及其
  • Java Runtime.getRuntime().exec() 似乎正在覆盖 $PATH

    对于一个自动化一些突变充分性测试的项目 我正在尝试从 Java 程序内部的源代码制作 GoLang 我已经能够从终端中的源代码中创建它 并尝试在 Java 中使用该命令Runtime getRuntime exec 命令 String en
  • 我们如何将 void_t 用于 SFINAE?

    我观看了 Walter Brown 在 Cppcon14 上关于现代模板编程的演讲 Part I Part II 他在那里展示了他的void tSFINAE 技术 Example 给定一个简单的变量模板 其计算结果为void如果所有模板参数
  • Retrofit + OkHTTP - 响应缓存不起作用

    我知道有很多类似的问题 但我已经阅读了所有这些问题 但没有一个真正有帮助 所以 这是我的问题 我正在使用 Retrofit okhttp 从 API 获取一些数据 我想缓存它们 不幸的是 我没有 API 服务器的管理员访问权限 因此无法修改
  • Google Glass 将视频流传输到服务器

    我正在尝试为 Google Glass 构建一个应用程序 它可以流式传输到服务器并让客户端通过网络浏览器查看流 到目前为止 我似乎需要通过 RTSP 到媒体服务器 例如 Wowza 执行此操作 然后拥有一个托管一些视频播放器的 Web 服务
  • 包含 url 值的 PHP 数组到包含组合值的新数组

    我已经尝试了很长时间 但找不到一种将数组合并到新数组的方法 大多数时候我迷失在循环和匹配中 我想收到一个可以执行以下操作的 php 5 方法 实施例1 假设有一个包含如下 url 的数组 Array a a b c a b c d e a
  • JSP - 如何在 session.setAttribute 中传递 javascript var? [复制]

    这个问题在这里已经有答案了 刚开始学习 JSP 并尝试在两个页面之间传递数据 我想知道是否可以将 javascript 变量传递给session setAttribute 目前 我可以通过 2 个 jsp 文件传递 一串文本 如下所示 JS
  • 如何修复 src 文件系统问题上的资源更改

    我正在尝试使用Hive关于 MR 执行SQL它中途失败并出现以下错误 Application application 1570514228864 0001 failed 2 times due to AM Container for app
  • 关于 PYTHONPATH 的 Python 2.x 多版本问题

    系统中安装了Python 2 6 现在我想使用Python 2 7中引入的模块 因为我没有root权限 所以我在我的主目录 HOME local 下构建并安装了2 7 我将以下内容添加到我的 HOME bashrc 中 export PAT