2012-10-25 86 views
3

我有一個燒瓶項目,我已經把燒瓶模塊(版本0.9)直接放在我的app.py文件旁邊。我已經這樣做了,因此我可以將所有東西都捆綁到一個版本控制庫中,而不需要其他人使用它來安裝額外的Python模塊。如何手動安裝Flask擴展?

我想使用flask-login,所以我試着通過下載最新版本並將flask_login.py文件放在我的「local」flask/ext /目錄中來手動安裝它。然而,雖然我可以import flaskimport flask.ext,我無法import flask.ext.login與Python投擲ImportError: No module named flask.ext.loginimport flask.ext.flask_login也會引發導入錯誤。

如果Flask和它的擴展名是app.py的本地擴展名,我有什麼不同嗎?

+0

你可以做'進口燒瓶'嗎? – Fabian

+0

我更新了我的問題。我可以'進口燒瓶'和'import flask.ext' – Soviut

+0

''ImportError:沒有名爲flask.ext.flask的模塊''不是'flask.ext.login''!你在哪裏有''進口flask.ext.flask''? – mouad

回答

4

解決的辦法是把flask_login.py文件放在與我的app.py文件相同的目錄中。不需要修改flask/ext/__init__.py文件。

flask.ext模塊僅用作擴展導入程序,而不是已安裝擴展的存儲庫。根據導入路徑,我認爲flask/ext文件夾是擴展名被複制的地方。這是不正確的。擴展只需要在python路徑上的某處。

3

Python沒有拋出異常的情況下,這瓶模塊負責在ext文件夾修改標準import鉤: https://github.com/mitsuhiko/flask/blob/master/flask/exthook.py

所以,我不認爲把flask_login.pyflask/ext是在Flask中使用擴展的正確方法。文檔建議使用pip install flask-loginpython setup.py install。之後,你可以這樣做:

import flask_login 

如果仍要做手工,從ext/__ init__.py刪除setup()電話。 它可能有一個很好的理由爲什麼Flask傢伙這樣做,雖然:-)

+0

沒錯,但重點是手動安裝所有東西,以便它可以獨立存放在版本控制存儲庫中,不需要額外安裝。我查看了setup.py文件,但無法確定它如何實現安裝。 – Soviut

+0

@Soviut又一次更新了我的答案。 – Fabian

+0

修改燒瓶來源看起來很激烈,但即使這樣也行不通。我仍然得到一個'ImportError:No module named login' – Soviut

1

Right, but the point was to manually install everything so it could be self-contained in a version control repository that won't require additional installs. I've looked at the setup.py file but can't determine how it achieves the installation. – Soviut Oct 25 at 10:06

爲什麼不使用virtualenv來實現呢?您也可以將env推送到源代碼控制,儘管這不是正常的用法。

請參閱:http://www.virtualenv.org/en/latest/

+0

我不希望使用此存儲庫的學生不得不與任何額外的圖層競爭就像virtualenv一樣,因爲它會讓他們從主要任務中分心。 – Soviut

+0

此外,已經提到某些主機(如Google App Engine)不允許虛擬環境,因此並排放置模塊是唯一的解決方案。 – Soviut