为什么Flask应用中的环境变量为空?

时间:2015-02-25 05:44:39

标签: python flask environment-variables

我有一个烧瓶应用程序(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)我该如何设置?

任何帮助表示感谢。

1 个答案:

答案 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绑定,但是现在调用可执行文件可以正常工作。