我需要在python脚本中设置一些环境变量,我希望从python(shell脚本)调用的所有其他脚本都是子进程,以查看环境变量集.该值是一个数字.
如果我这样做os.environ["DEBUSSY"] = 1,它抱怨说1必须是字符串.我也想知道在设置之后如何在python中读取环境变量(在脚本的后面部分).
我有一个bash脚本,用于设置环境变量并运行命令
LD_LIBRARY_PATH=my_path
sqsub -np $1 /homedir/anotherdir/executable
Run Code Online (Sandbox Code Playgroud)
现在我想使用python而不是bash,因为我想计算一些我传递给命令的参数.
我试过了
putenv("LD_LIBRARY_PATH", "my_path")
Run Code Online (Sandbox Code Playgroud)
和
call("export LD_LIBRARY_PATH=my_path")
Run Code Online (Sandbox Code Playgroud)
其次是
call("sqsub -np " + var1 + "/homedir/anotherdir/executable")
Run Code Online (Sandbox Code Playgroud)
但是程序总是放弃,因为没有设置LD_LIBRARY_PATH.
我怎样才能解决这个问题?
感谢帮助!
(如果我在调用python脚本之前导出LD_LIBRARY_PATH一切正常,但我希望python确定路径并将环境变量设置为正确的值)
如何在运行时更新此环境变量,以便ctypes可以在任何地方加载库?我尝试了以下,似乎都没有工作.
from ctypes import *
os.environ['LD_LIBRARY_PATH'] = "/home/starlon/Projects/pyCFA635/lib"
os.putenv('LD_LIBRARY_PATH', "/home/starlon/Projects/pyCFA635/lib")
lib = CDLL("libevaluator.so")
Run Code Online (Sandbox Code Playgroud) 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(),但无济于事.
我在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?
我正在尝试覆盖 Python 中的环境变量。我可以读取该值,然后写入该值并打印更新后的值。但是,如果我检查命令行中的值,它仍然是原始值。这是为什么?
首先,我创建变量
export MYVAR=old_val
Run Code Online (Sandbox Code Playgroud)
我的测试脚本 myvar.py
#!/usr/bin/env python3
import os
print (os.environ['MYVAR'])
os.environ['MYVAR'] = "new_val"
print (os.environ['MYVAR'])
Run Code Online (Sandbox Code Playgroud)
输出
$ ./myvar.py
old_val
new_val
$ echo $MYVAR
old_val
Run Code Online (Sandbox Code Playgroud)
如您所见,输出的最后一行仍然显示 old_val