相关疑难解决方法(0)

在python中导入之前设置LD_LIBRARY_PATH

Python使用PYTHONPATH环境变量来确定它应该在哪些文件夹中查找模块.您可以通过修改来解决它sys.path,它可以很好地用于纯Python模块.但是当一个模块使用共享对象文件或静态库时,它会在LD_LIBRARY_PATH(在linux上)查找它们,但是根据我所知,这不能轻易改变并且是平台相关的.

这个问题的快速修复当然是设置环境变量或调用脚本LD_LIBRARY_PATH=. ./script.py,但是你必须为你打开的每个新shell再次设置它.此外,.so我的情况下的文件将始终与文件位于同一目录中.py,但很可能会移动到另一个绝对路径,所以我想每次调用脚本时自动设置它们.

如何编辑Python解释器在运行时独立查找库平台的路径?

编辑:

我已经尝试过os.environ['LD_LIBRARY_PATH'] = os.getcwd(),但无济于事.

python import environment-variables sys

34
推荐指数
3
解决办法
5万
查看次数

更改当前进程环境的LD_LIBRARY_PATH

是否有可能改变当前流程的环境变量?

更具体地说,我想改变python脚本,LD_LIBRARY_PATH以便在导入依赖于某些模块的模块'x'时xyz.so,xyz.so取自LD_LIBRARY_PATH中的给定路径

有没有其他方法动态更改库加载的路径?

编辑:我想我需要提一下,我已经尝试过像os.environ这样的东西["LD_LIBRARY_PATH"] = mypath os.putenv('LD_LIBRARY_PATH',mypath)

但这些修改了env.对于生成的子进程,而不是当前进程,并且模块加载不考虑新的LD_LIBRARY_PATH

Edit2,所以问题是我们可以改变环境或其他东西,以便库加载器看到它并从那里加载吗?

python shared-libraries environment-variables

22
推荐指数
2
解决办法
2万
查看次数

从Python内部设置LD_LIBRARY_PATH

有没有办法在运行时设置指定Python查找共享库?

fontforge.so找到了fontforge_bin并尝试了以下内容

os.environ['LD_LIBRARY_PATH']='fontforge_bin'
sys.path.append('fontforge_bin')
import fontforge
Run Code Online (Sandbox Code Playgroud)

得到

ImportError: fontforge_bin/fontforge.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这样lddfontforge_bin/fontforge.so提供了以下

linux-vdso.so.1 =>  (0x00007fff2050c000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007f10ffdef000)
libc.so.6 => /lib/libc.so.6 (0x00007f10ffa6c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f110022d000)
Run Code Online (Sandbox Code Playgroud)

python linux fontforge

20
推荐指数
3
解决办法
3万
查看次数

如何使用Apache和mod_wsgi为django网站单独设置LD_LIBRARY_PATH

我在Apache2上使用mod_wsgi在ubuntu上部署我的Django网站.

在我的Django视图中,我导入了一个需要在LD_LIBRARY_PATH中设置特定路径的模块.

当我在/ etc/apache2/envvars中设置LD_LIBRARY_PATH时:

export LD_LIBRARY_PATH=/home/user/target_libdir:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

有用.

但是,在我的服务器上,我使用独立的wsgi脚本运行多个django网站,每个网站都在独立的VirtualHost条目中.

问题是网站需要使用不同的LD_LIBRARY_PATH版本.

那么,如何为每个django网站单独设置LD_LIBRARY_PATH?

apache django mod-wsgi

10
推荐指数
1
解决办法
3404
查看次数

Cython 无法找到共享对象文件

我正在尝试按照我在网上找到的说明(包括以下答案)从 Cython 链接到我自己的 C 库:

使用 Cython 将 Python 链接到共享库

我正在通过 Spyder 运行 IPython。

我的 setup.py 看起来像这样:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy as np

setup(
  ext_modules = cythonize(
      [Extension("*",["*.pyx"],
                 libraries =["MyLib"],
                 extra_compile_args = ["-fopenmp","-O3"],
                 extra_link_args=["-L/path/to/lib"])
                 ]),
  include_dirs = [np.get_include()],
)
Run Code Online (Sandbox Code Playgroud)

文件libMyLib.so在里面/path/to/lib,它编译得很好。

我的 IPython 配置文件启动文件夹中有一个 Python 脚本可以执行此操作

try:
  os.environ["LD_LIBRARY_PATH"] += ":/path/to/lib"
except KeyError:
  os.environ["LD_LIBRARY_PATH"] = "/path/to/lib"
Run Code Online (Sandbox Code Playgroud)

我可以确认这正在运行,因为如果我输入os.environ["LD_LIBRARY_PATH"]IPython 解释器,它会返回/path/to/lib

但是当我尝试加载 Cython 模块(即import mycythonmodule)时,我得到:

ImportError: …
Run Code Online (Sandbox Code Playgroud)

python linker ipython cython

5
推荐指数
1
解决办法
3229
查看次数