- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
好的,我有一个旧的 Debian VM。包管理器是无用的。不,我不会更新操作系统。
我在我的系统上正确安装了 bzip2 库和开发 header (它们实际上来自一个包)。
我从系统上绝对没有 Python 开始。我手动删除了所有内容。我下载了 Python 2.7.5 源代码,并使用 ./configure --prefix=/usr
配置。它配置良好。我运行 make
,它编译得很好。我尝试 ./python -c "import bz2; print bz2.__doc__"
,它有效,并说:
The python bz2 module provides a comprehensive interface for the bz2 compression library. It implements a complete file interface, one shot (de)compression functions, and types for sequential (de)compression.
然后我运行 make test
,整个测试套件进展顺利,特别是“test_bz2”测试通过。
然后我运行 make install
,它将我的新 Python 二进制文件安装到我想要的/usr/bin/中。
我尝试 /usr/bin/python -c "import bz2; print bz2.__doc__"
,但失败了:
Traceback (most recent call last): File "", line 1, in ImportError: No module named bz2
我尝试了很多不同的方法,包括将 Python 构建为 --enable-shared
而不是,运气不好。我已经尝试了至少 10 次(每次都彻底清除所有内容,运行 make distclean
等)。运气不好。
我试过:PYTHONPATH="/usr/lib/python2.7";导出 PYTHONPATH
。仍然没有运气。
但是,如果我删除 make install
为/usr/bin/python 创建的符号链接(symbolic link),而是执行:ln -s/path/to/my/python/compile/python python
,现在它神奇地起作用了。
所以,到底是什么?为什么我创建的这个 Python 二进制文件只能在二进制文件存在于编译目录中时才能找到内容,而不是当它被放入正常的生产安装位置时?我错过了什么?
我在整个过程中都是 root,从 configure
到 make
到 make install
到尝试测试 Python 导入调用。
我又从头开始了(这次用--enable-shared
btw 编译),并验证不仅在编译目录中有build/lib.linux-x86_64 -2.7/bz2.so
,但是一旦我运行 make install
,该文件就会被放入 /usr/lib/python2.7/lib-dynload/bz2.so
.
我已经尝试阅读一些关于 lib-dynload 的资料,但无法确定是否有其他 Python 程序(例如 CLI 的默认配置或其他)需要能够告诉它从 lib-dynload 中拉取模块导入,或者如果有其他地方或选项告诉 make install
应该把它而不是 dynload 放在哪里。
我仍然无法解释为什么 /path/to/compilation/python
二进制文件可以找到并加载 bz2.so
正常,但是 /usr/bin/python
二进制文件找不到(或加载)/usr/lib/python2.7/lib-dynload/bz2.so
。
我认为这可能是因为安装没有像 /usr/lib/python
符号链接(symbolic link)那样创建指向 /usr/lib/python2 的事实。 7
目录。但是我创建了符号链接(symbolic link),但还是不行。
我还是迷路了。
最佳答案
似乎是通过一长串 Twitter 对话意外得出了一种无答案的答案。
我在这里提交了另一个 Stack Overflow 问题,询问为什么我们找到了这个问题的解决方案:https://stackoverflow.com/questions/17662091/python-installation-prefix-not-being-persisted-in-config
为了后代,现在的解决方案是我必须将 PYTHONHOME
环境变量设置为 /usr
,一切都会开始工作。令人费解的部分是文档说 PYTHONHOME 应该默认为 {prefix},我在配置到 /usr
期间明确将其设置为默认值。那么为什么我必须手动设置它呢?
运行 python-config --prefix
显示 {prefix} 默认值实际上是 /usr/bin
,而不是 /usr
我指定了,这导致我需要将默认值覆盖回默认值,这很奇怪。
关于Python 安装,找不到 bz2 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17608352/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!