У меня есть приложение Flask в virtualenv, использующее 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 по умолчанию. Я использую его для всех других проектов, и у меня никогда не было проблем с символическими ссылками на других virtualenv из этого места.

Приложение использует следующий интерпретатор Python: /home/<user>/sample_app/sample_app/venv/bin/python3.6. Когда я активирую этот venv, я могу import constants без проблем. Кроме того, файл присутствует, когда я перечисляю содержимое /home/<user>/sample_app/sample_app/venv/lib/python3.6/sites-packages.

И не уверен, что это важно, но я могу запустить приложение из терминала и вижу желаемый * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit).

Из 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'

Я могу с уверенностью сказать, что приложение правильно активирует venv.

Из 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
enece