【发布时间】:2015-04-27 00:48:40
【问题描述】:
我有一个烧瓶应用程序 (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”被正确导入;但是,当我执行烧瓶应用程序(即 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 应用中调用时“LD_LIBRARY_PATH”为空?
(2) 如何设置?
任何帮助表示赞赏。
【问题讨论】:
-
flask 是作为 apache 指令的一部分执行的吗? Apache 限制对环境变量的访问(出于非常好的理由,出于安全目的)。你想要的任何东西都需要通过 apache 指令或直接在正在执行的 wsgi 脚本中传递。至少对于 django 来说是这样的。
-
现在我只是直接执行烧瓶应用程序。我最终将通过 nginx/gunicorn 执行它,但现在我想让它独立运行。我可能需要在一些烧瓶 wsgi 配置文件中设置这些变量吗?
-
好吧,如果它被直接执行,你执行它的命令是什么?环境变量不会也不应该被传递到 Web 应用程序中,这很危险并且很容易造成安全隐患。如果您直接执行它,它可能会调用特殊的开发模式,这意味着您需要在 python 路径上设置您的 lib 或将要导入的东西。
-
我正在从 shell 执行它:python my_app.py。这是寻找如何在 Flask 中导入变量的好建议。我会调查的。谢谢
标签: python flask environment-variables