在$HOME/.local
中构建并安装Python 3.5.1之后,安装的版本似乎找不到$HOME/.local/lib64/python3.5/lib-dynload
中安装的自己的库。
python3.5可执行文件将显示以下内容:
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Python 3.5.1 (default, Jan 26 2016, 15:40:42)
[GCC 4.8.1 20130909 [gcc-4_8-branch revision 202388]] on linux
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
File "/etc/pythonstart", line 7, in <module>
import readline
ImportError: No module named 'readline'
如果按照建议设置PYTHONHOME=$HOME/.local
,前两行将会消失,但仍然无法导入readline
(以及math
和其他大多数模块。
如果我在$HOME/.local/lib64/python3.5/lib-dynload
内部实际启动python,它将成功加载库。所以我猜测导入路径设置不正确。
PYTHONHOME=$HOME/.local
推荐错了吗?或者是否有另一个需要设置的env变量才能让它找到库?
答案 0 :(得分:0)
设置PYTHONPATH=$HOME/.local/lib64/python3.5/lib-dynload
解决了问题,但我强烈怀疑这是一种伪劣的解决方法,它应该以其他方式自动找到该文件夹。
答案 1 :(得分:0)
看起来你只需要将Python的共享库添加到系统范围的动态链接库中,就像这样:
echo "/usr/local/python35/lib/" >> /etc/ld.so.conf.d/python35.conf
echo "/wherever/your/.so/files/used/by/python35/live/" >> /etc/ld.so.conf.d/python35.conf
然后在命令行:ldconfig -v
。
顺便说一句,您的$HOME/.dir
目录中不应包含动态库。这应该是系统范围的,因为Python运行时通常被理解为系统范围的程序。为什么你configure
Python编译到$HOME/.local
?典型的prefix
应该类似于/usr/local/python35
(对于&#34;本地&#34;安装)。
唯一&#34;正常&#34;将Python安装到$HOME
的子目录的情况是您无法访问系统上的root帐户和 sysadmin出于某种原因拒绝为您编译Python,但是您真的必须在这个特定版本中拥有它。
如果您使用的是Debian / Ubuntu,通常您甚至不需要自己编译最新的Python或其他新软件,而且还有#34; backport&#34;回购此事。
<强>更新强>
由于看起来你无法在系统范围内添加它,我看到的唯一合理的选择是这样的:
将LD_LIBRARY_PATH
添加到您的.bash_profile
,如此:
LD_LIBRARY_PATH=/your/python35/libs:/other/libs:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
这可确保动态链接器(.so
)看到您的ld
文件,但这些文件仅在您的登录shell中可见。
以类似的方式在bin
的{{1}}中添加您的Python安装PATH
目录:
.bash_profile
PATH=/your/python35/bin:$PATH
这会将您的Python 3.5放在export PATH
的第一位,这样您就可以先找到它(我想这就是您想要的)。它还允许你使用shebang&#34; mantra&#34;为您的代码:
PATH
如果您使用此功能,则无需修改即可在您的帐户和其他地方(例如某些virtualenv,系统Python 3.5等)运行它。