簡體   English   中英

Apache + WSGI運行Flask,獲取Python ImportError:“無法導入名稱…”或“未命名模塊…”

[英]Apache + WSGI to run Flask, get Python ImportError: “cannot import name …” or “No module named …”

尊敬的SO用戶您好,歡迎來到我的第一個SO問題,

我目前正在尋找使用Apache和mod_wsgi部署Flask應用程序的方法。 一切都使用Python 3.4進行了編碼,因此我必須遵循幾個教程 / 問題才能使mod_wsgi使用我的Python版本(因為apt-get install獲得了與Python 2.7兼容的3.4版本,因此必須在將其與之兼容后進行編譯點入Python 3 virtualenv,使其成為4.x版本)。

Apache服務器error.log顯示了配置的Apache/2.4.10 (Debian) mod_wsgi/4.4.13 Python/3.4.2 configured因此看來工作正常。

我的問題在於.wsgi文件中的應用程序導入。 諸如此類的教程通常是from FlaskApp import app as application考慮它們的文件樹來完成的,並且這在最小的應用程序中可以正常工作,我嘗試了它沒有任何問題。

我的應用程序稍微復雜一點,並使用manage.py文件在localhost上運行,一旦嘗試在Apache上進行部署,這可能是問題的一部分。

從我在無數SO問題和其他站點的問題中發現的信息來看,這很可能來自:

  • 權限問題(如果執行當前腳本的用戶對他要導入的腳本沒有正確的閱讀權限)
  • sys.path問題(如果頂級文件夾不在sys.path ,則Python 3無法看到它)

主要是出於沮喪,我最終在/ var / www /中使用chmod 744 LongAppName產生了drwxrwxr-x權限。 我的文件樹如下:

drwxrwxr-x LongAppName
    drwxr-xr-x LongAppName
        drwxr--r-- ShorterAppName
            -rw-r--r-- app.py
            -rw-r--r-- commands.py
            -rw-r--r-- __init__.py
            drwxr--r-- static
            drwxr--r-- templates
            <irrelevant files>
        -rw-r--r-- __init__.py
        -rw-r--r-- manage.py
        drwxr-xr-x venv
        <more irrelevent files>
    -rwxr-xr-x longappname.wsgi

因此,對於第一個可能的修復,權限對我來說似乎不錯。 關於第二個,我打印sys.path在.wsgi文件,並將其outpouts ['/var/www/LongAppName', <among others>]這表明頂級文件夾sys.path

我的longappname.wsgi如下:

#!/var/www/LongAppName/LongAppName/venv/bin/python3
import os, sys, logging
#Doing some prints to check if we're in the venv and such.
PROJECT_DIR = '/var/www/LongAppName/'
if PROJECT_DIR not in sys.path:
    sys.path.insert(0, PROJECT_DIR)

def execfile(filename):
    globals = dict( __file__ = filename )
    exec( open(filename).read(), globals )

activate_this = os.path.join( PROJECT_DIR+'LongAppName/', 'venv/bin', 'activate_this.py' )
execfile( ativate_this )
#Printing sys.path and sys.executable here
logging.basicConfig(stream=sys.stderr)

from LongAppName.ShorterAppName.app import manager as application
#The previous line changed a lot, I tried importing app, changing the path but this one was the first one I wrote.

Python似乎找不到LongAppName.ShorterAppName.app,我也不知道為什么。

從我嘗試測試我最初編寫的代碼的不同替代方案的嘗試中,我開始失去了對什么是好的以及可能導致問題的原因的跟蹤,因此我需要您的幫助來解決這一問題。

提前致謝!

現在懷疑您的某些目錄權限。 你有:

    drwxr--r-- ShorterAppName

最好使用:

    drwxr-xr-x ShorterAppName

靜態和模板相同。

我們真正需要查看的是確切的Python異常詳細信息,並具有從Apache錯誤日志進行追溯的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM