在Apache2上使用venv的Flask应用程序无法导入从另一个Python / venv符号链接的文件

时间:2019-12-21 02:23:43

标签: python apache flask ubuntu-18.04

我在virtualenv中有一个Flask应用程序,它使用python3.6在Apache2上运行得很好,除了它无法导入存储静态变量的python文件(constants.py)之外。我的操作系统是Ubuntu 18.04。

现在,constants.py/home/<user>/.local/lib/python3.7/site-packages/constants.py符号链接。 Python 3.7是我的默认python3。我将其用于所有其他项目,并且从未遇到过从该位置与其他virtualenvs进行符号链接的问题。这个Flask应用程序是我第一次使用3.6,因此我倾向于认为像这样的交叉版本是问题的一部分。

该应用程序使用以下python解释器:/home/<user>/sample_app/sample_app/venv/bin/python3.6。激活该虚拟电话后,我可以import constants没有问题。另外,当我列出/home/<user>/sample_app/sample_app/venv/lib/python3.6/site-packages的内容时,该文件也存在。

不确定这是否很重要,但是我可以从终端运行该应用程序,并且看到所需的* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

我可以肯定地说该应用程序正在正确激活venv。

来自error.log:

mod_wsgi (pid=15792): Target WSGI script '/home/<user>/sample_app/sample_app/my_flask_app.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=15792): Exception occurred processing WSGI script '/home/<user>/sample_app/sample_app/my_flask_app.wsgi'.
Traceback (most recent call last):
    File "/home/<user>/sample_app/sample_app/my_flask_app.wsgi", line 17, in <module>
        from ts_lineage import app as application
    File "/home/<user>/sample_app/sample_app/my_flask_app.py", line 10, in <module>
        import constants
ModuleNotFoundError: No module named 'constants'

来自my_flask_app.wsgi:

#!/usr/bin/python3

activate_this = '/home/<user>/sample_app/sample_app/venv/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

import logging
import sys

logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/home/<user>/sample_app/sample_app/')

from my_flask_app import app as application

application.secret_key = 'secret key'

来自my_flask_app.py:

#!/home/<user>/sample_app/sample_app/venv/bin/python3.6

from flask import Flask
import pandas as pd
from flask_jsonpify import jsonify
import constants   # Works if I remove this line!


app = Flask(__name__)
@app.route('/')


def get():
    <my code here>


if __name__ == '__main__':
    app.run()

那里有什么主意吗?

0 个答案:

没有答案