[英]Python virtual environment error: Module not found error for flask and spacy libraries
[英]Python Flask two sites and Virtual Environment using Paramiko Library Error
我開發了一個Python Flask應用程序,希望在運行另一個Flask應用程序的服務器(RHEL 6)中運行。 我正在使用httpd(apache)和mod_wsgi來實現這一點。 第一個應用程序運行良好,沒有任何問題。
我在/ var / www / app2上安裝了我的應用程序,目錄結構為:
app2
|_ app2
| |_ config.ini
| |_ __init__.py
| |_ static
| |_ templates
| |_ venv
|_ app2.wsgi
/ var / www / app2上的所有文件和目錄的權限均為755,並且我正在使用虛擬環境通過pip paramiko和flask安裝,擁有所有這些文件和目錄的用戶稱為“ user1”
app2.wsgi的內容是:
import sys
import logging
activate_this = '/var/www/app2/app2/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/app2/")
from app2 import app as application
apache服務器上的虛擬主機配置為:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName server1
ServerAdmin webmaster@example.org
WSGIDaemonProcess app1 user=user1 group=user1 threads=5
WSGIScriptAlias /app1 /var/www/app1/app1.wsgi
<Directory /var/www/app1/app1/>
Order allow,deny
Allow from all
</Directory>
Alias /app1/static /var/www/app1/app1/static
<Directory /var/www/app1/app1/static/>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess app2 user=sat_user group=sat_user threads=5
WSGIScriptAlias /app2 /var/www/app2/app2.wsgi
<Directory /var/www/app2/app2/>
Order allow,deny
Allow from all
</Directory>
Alias /app2/static /var/www/app2/app2/static
<Directory /var/www/app2/app2/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/httpd/error.log
LogLevel warn
CustomLog /var/log/httpd/access.log combined
</VirtualHost>
我重新啟動了服務器上的httpd服務,當我嘗試使用http:// server1 / app2連接到新應用程序時,通過查看apache的error.log出現了內部服務器錯誤,我看到以下內容:
mod_wsgi (pid=8205): Target WSGI script '/var/www/app2/app2.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=8205): Exception occurred processing WSGI script '/var/www/app2/app2.wsgi'.
Traceback (most recent call last):
File "/var/www/app2/app2.wsgi", line 10, in <module>
from app2 import app as application
File "/var/www/app2/app2/__init__.py", line 2, in <module>
import paramiko
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/paramiko/__init__.py", line 30, in <module>
from paramiko.transport import SecurityOptions, Transport
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/paramiko/transport.py", line 33, in <module>
from cryptography.hazmat.backends import default_backend
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/cryptography/hazmat/backends/__init__.py", line 7, in <module>
import pkg_resources
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 3019, in <module>
@_call_aside
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 3003, in _call_aside
f(*args, **kwargs)
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 3032, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 646, in _build_master
ws = cls()
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 639, in __init__
self.add_entry(entry)
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 695, in add_entry
for dist in find_distributions(entry, True):
File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 2012, in find_on_path
if len(os.listdir(fullpath)) == 0:
OSError: [Errno 13] Permission denied: '/usr/lib64/python2.6/site-packages/tornado-4.4.1.dist-info'
同樣,第一個應用程序沒有任何問題,如果我使用用戶“ user1”登錄並連接到虛擬環境並使用python __init__.py
運行該應用程序,則可以在端口5000上毫無問題地進行連接。
看來paramiko嘗試訪問虛擬環境之外的某些庫,導致錯誤,我不知道為什么,我嘗試禁用SELinux,結果仍然相同。
任何幫助將不勝感激!
謝謝
當您使用WSGIDaemonProcess
指令以使WSGI應用程序以守護程序模式運行時,您仍然需要標記要在該守護進程組中運行的WSGI應用程序。 您無需執行此操作,因此WSGI應用程序仍以Apache用戶身份以嵌入式模式(Apache worker進程)運行。
你需要為使用WSGIProcessGroup
在適當的范圍內,或process-group
選項WSGIScriptAlias
委托一個WSGI應用程序的守護進程組。
有關這些指令的信息,請參見:
另請參閱有關使用mod_wsgi設置Python虛擬環境的最佳方法的文檔。 您沒有使用推薦的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.