В настоящее время у меня есть Flask настройка веб-сайта, которая будет обслуживаться с использованием WSGI через apache2.
В настоящее время он работает с моим текущим файлом конфигурации apache2. Вот мой файл конфигурации:
<VirtualHost *:80>
ServerName dmt.server.local
ServerAdmin nh@server.com
WSGIProcessGroup dmt
WSGIDaemonProcess dmt python-path=/var/www/dmt/venv/lib/python3.6/site-packages
# WSGIDaemonProcess dmt python-path=/home/nh/.pyenv/versions/dmt/lib/python3.6/site-packages
WSGIScriptAlias / /var/www/dmt/dmt.wsgi
<Directory /var/www/dmt/app/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Как видите, я использую python с виртуальной средой, которая хранится в папке моего приложения, в папке с именем venv. Я создал эту виртуальную среду, используя "python -m venv venv".
Однако вместо этого я хочу использовать Pyenv. Pyenv сохраняет файлы в /home/nh/.pyenv/
. Поэтому я меняю строку в конфигурации apache2, чтобы она теперь указывала на мою новую виртуальную среду Pyenv.
<VirtualHost *:80>
ServerName dmt.server.local
ServerAdmin nh@server.com
WSGIProcessGroup dmt
# WSGIDaemonProcess dmt python-path=/var/www/dmt/venv/lib/python3.6/site-packages
WSGIDaemonProcess dmt python-path=/home/nh/.pyenv/versions/dmt/lib/python3.6/site-packages
WSGIScriptAlias / /var/www/dmt/dmt.wsgi
<Directory /var/www/dmt/app/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
После перезапуск сервера, теперь это больше не работает. Теперь я получаю ошибку сервера 500, и теперь в журналах я получаю исключение в журналах ошибок apache2, что модуль Flask не может быть найден:
[Fri May 01 11:27:47.417664 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] mod_wsgi (pid=36878): Failed to exec Python script file '/var/www/dmt/dmt.wsgi'.
[Fri May 01 11:27:47.418291 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] mod_wsgi (pid=36878): Exception occurred processing WSGI script '/var/www/dmt/dmt.wsgi'.
[Fri May 01 11:27:47.418315 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] Traceback (most recent call last):
[Fri May 01 11:27:47.418330 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] File "/var/www/dmt/dmt.wsgi", line 8, in <module>
[Fri May 01 11:27:47.418466 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] from app import app as application
[Fri May 01 11:27:47.418473 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] File "/var/www/dmt/app/__init__.py", line 1, in <module>
[Fri May 01 11:27:47.418517 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] from flask import Flask
[Fri May 01 11:27:47.418529 2020] [wsgi:error] [pid 36878:tid 140448159041280] [remote 10.31.150.128:64766] ImportError: No module named flask
Я убедился, что у меня установлен pip все те же модули в ОБА виртуальных средах. Я дважды проверил, что файлы для модулей существуют и одинаковы в обоих местах.
Если я перехожу в каталог /home/nh/.pyenv/versions/dmt/lib/python3.6 / site-packages Я вижу, что модуль Flask действительно установлен.
Я не могу понять, чем отличаются эти два местоположения.
Почему он работает, когда Python путь - / var / www/dnt/venv, но он не работает, когда он находится в /home/nh/.pyenv/versions/dmt, даже если файлы в обоих местах одинаковы.
Кто-нибудь знает что происходит?