python 3.5的本地安装找不到它的库

时间:2016-01-26 15:12:33

标签: python linux

$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变量才能让它找到库?

2 个答案:

答案 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;回购此事。

<强>更新

由于看起来你无法在系统范围内添加它,我看到的唯一合理的选择是这样的:

  1. LD_LIBRARY_PATH添加到您的.bash_profile,如此:

    LD_LIBRARY_PATH=/your/python35/libs:/other/libs:$LD_LIBRARY_PATH

    export LD_LIBRARY_PATH

  2. 这可确保动态链接器(.so)看到您的ld文件,但这些文件仅在您的登录shell中可见。

    1. 以类似的方式在bin的{​​{1}}中添加您的Python安装PATH目录:

      .bash_profile

      PATH=/your/python35/bin:$PATH

    2. 这会将您的Python 3.5放在export PATH的第一位,这样您就可以先找到它(我想这就是您想要的)。它还允许你使用shebang&#34; mantra&#34;为您的代码:

      PATH

      如果您使用此功能,则无需修改即可在您的帐户和其他地方(例如某些virtualenv,系统Python 3.5等)运行它。