2015-06-11 43 views
2

我的項目具有以下結構:Python的絕對進口不工作的Ubuntu服務器上

server/ (root of project) 
    | 
    |--- __init__.py 
    |--- requirements.txt 
    |--- env/ (virtual environment) 
    |--- app/ (main app folder) 
     |--- __init__.py (defines a 'app = Flask(__name__)' object) 
     |--- app.py (runs app on local server) 
     |--- models.py 
     |--- views.py 

app.py我的本地機器上導入不同模塊的方式是do

# /server/app/app.py 

from server.app import app 
from server.app.models import * 
from server.app.views import * 

它工作正常在我的本地機器上(使用PyCharm IDE和虛擬環境文件夾內的Python二進制文件夾/server/env/bin/

但是,當我推到這個運行Ubuntu生產服務器,在那裏我安裝所有的依賴全球,當我運行它不斷拋出錯誤no module named server.app

python server/app/app.py 

有誰知道爲什麼嗎?

+0

沒有服務器/ app.py然而服務器/ app/app.py – Rash

+0

@Rash感謝提醒,只是糾正它。 – benjaminz

+1

在您的IDE環境中,他們自動編輯您的Python源路徑。您需要將您的路徑添加到Python路徑。使用這個sys.path.append('/ path/to/the/example_file.py') – Rash

回答

1

任何IDE環境通常會設置pythonpath。例如。在Eclipse中右鍵單擊您的項目並查看屬性。你會看到你的主項目被列在pythonpath中。該路徑用於查找模塊。

現在在您的生產代碼中,您不在IDE中。所以普通的python解釋器找不到你的路徑。因此你需要指定這個。

一種方法是在導入之前添加sys.path.append('/path/to/the/project')(這應該在執行的第一個腳本中完成,在這種情況下爲app.py,這樣您只需要執行一次)。

您還可以將您的路徑永久添加到您的生產環境中。見this後。

0

As @Rash提到,您的IDE很可能會將包含/server的目錄添加到您的python path。您可以在您的app.py中加入

import sys 
print "\n".join(sys.path) 

之前您的進口。

當您手動運行您的應用程序時,即python server/app/app.py,您的server目錄的父級顯然不在您的python路徑中,因此您必須添加自己。

+0

如果我使用@ Rash的建議'sys.path.append('/ path/to/the/example_file.py')',我把這個代碼放在哪個文件中?謝謝! – benjaminz

+0

與'sys.path'混淆通常不是一個壞主意。更新你的'PYTHONPATH'環境變量(將運行你的應用程序的用戶之一)會更好。雖然我們在這裏,但在生產環境中使用virtualenv也更爲安全。 –

相關問題