戴上我的掘墓者帽子...
我发现解决此问题的最佳方法是在编译时。由于您是一个设置前缀,因此无论如何最好还是明确告诉可执行文件在哪里可以找到其共享库。与OpenSSL和其他软件包不同,Python并没有为您提供出色的configure指令来处理备用库路径(并非每个人都是您所知道的root。)在最简单的情况下,您需要做的是:
./configure --enable-shared \
--prefix=/usr/local \
LDFLAGS="-Wl,--rpath=/usr/local/lib"
或者,如果您更喜欢非Linux版本:
./configure --enable-shared \
--prefix=/usr/local \
LDFLAGS="-R/usr/local/lib"
“ rpath”标志告诉python它具有在特定路径中需要的运行时库。您可以进一步利用此想法来处理安装到与标准系统位置不同的位置的依赖项。例如,在我的系统上,由于我没有超级用户访问权限,并且需要进行几乎完全独立的Python安装,因此我的configure行如下所示:
./configure --enable-shared \
--with-system-ffi \
--with-system-expat \
--enable-unicode=ucs4 \
--prefix=/apps/python-${PYTHON_VERSION} \
LDFLAGS="-L/apps/python-${PYTHON_VERSION}/extlib/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/extlib/lib" \
CPPFLAGS="-I/apps/python-${PYTHON_VERSION}/extlib/include"
在这种情况下,我在编译库,Python使用(如ffi,readline等)到extlib蟒蛇目录树本身的目录。这样,我可以将python-$ {PYTHON_VERSION}目录焦油放置在任何地方,它将“起作用”(前提是您不遇到libc任何libm冲突)。当您尝试在同一盒子上运行多个版本的Python时,这也很有帮助,因为您无需不断更改LD_LIBRARY_PATH或担心选择错误版本的Python库。
编辑:忘了提,如果你不设定编译会抱怨PYTHONPATH环境变量,您所使用的作为前缀,并且无法编译某些模块,例如,延长上面的例子中,设置PYTHONPATH在上使用的前缀以export PYTHONPATH=/apps/python-${PYTHON_VERSION}... 为例