我有一个烧瓶应用程序(my_app),它调用另一个文件中的函数(my_function):
my_app.py:
from my_functions import my_function
@app.route('/')
def index():
my_function()
return render_template('index.html')
my_functions.py:
def my_function():
try:
import my_lib
except:
print("my_lib not found in system!")
# do stuff...
if __name__ == "__main__":
my_function()
当我直接执行my_functions.py(即python my_functions.py)时,“my_lib”被导入而没有错误;但是,当我执行flask应用程序(即python my_app.py)时,我收到“my_lib”的导入错误。
当我在每个文件的开头打印LD_LIBRARY_PATH变量时:
print(os.environ['LD_LIBRARY_PATH'])
我在调用my_functions.py时得到正确的值,但在调用my_app.py时没有得到值(空)。在my_app.py的开头设置这个值没有效果:
os.environ['LD_LIBRARY_PATH'] = '/usr/local/lib'
问题:
(1)为什么在Flask app中调用'LD_LIBRARY_PATH'为空?
(2)我该如何设置?
任何帮助表示感谢。
答案 0 :(得分:0)
LD_LIBRARY_PATH被清除,可能出于安全原因,如Mike建议的那样。
为了解决这个问题,我使用subprocess直接调用可执行文件:
import subprocess
call_str = "executable_name -arg1 arg1_value -arg2 arg2_value"
subprocess.call(call_str, shell=True, stderr=subprocess.STDOUT)
理想情况下,程序应该能够使用python绑定,但是现在调用可执行文件可以正常工作。