4

app.py ファイルのすぐ横にフラスコ モジュール (バージョン 0.9) を配置した Flask プロジェクトがあります。これを行ったのは、他の誰かがそれを使用して追加の Python モジュールをインストールする必要がないバージョン管理リポジトリにすべてをバンドルできるようにするためです。

私はフラスコ ログインを使用したいので、最新バージョンをダウンロードし、flask_login.py ファイルを「ローカル」フラスコ/ext/ ディレクトリに配置して、手動でインストールしようとしました。ただし、import flaskimport flask.extはできますがimport flask.ext.login、Python の throwing ではできませんImportError: No module named flask.ext.loginimport flask.ext.flask_loginインポートエラーもスローします。

Flask とその拡張機能が app.py に対してローカルである場合、私が別のことをしなければならないことはありますか?

4

3 に答える 3

4

解決策は、flask_login.pyファイルを app.py ファイルと同じディレクトリに置くことです。flask/ext/__init__.pyファイルを変更する必要はありません。

このflask.extモジュールは、インストールされた拡張機能のリポジトリではなく、拡張機能のインポーターとしてのみ意図されています。インポート パスに基づいて、flask/extフォルダーは拡張機能がコピーされる場所であると考えました。これは間違っていました。拡張機能は、python パスのどこかにある必要があります。

于 2012-10-25T20:49:31.523 に答える
3

あなたの場合、Pythonは例外をスローしません。このFlaskモジュールは、フォルダー内 の標準importフックを変更する責任があります: https://github.com/mitsuhiko/flask/blob/master/flask/exthook.pyext

そのため、Flask で拡張機能を使用する正しい方法は、flask_login.py挿入することではないと思います。flask/extドキュメントでは、pip install flask-loginまたはを使用することを推奨していますpython setup.py install。その後、次のことができます。

import flask_login

それでも手動で行いたい場合は、 ext/__ init__.pysetup()から呼び出しを削除してください。Flaskの連中がこのようにしたのにはおそらく正当な理由があります:-)

于 2012-10-25T09:49:29.883 に答える
1

そのとおりです。ただし、要点は、追加のインストールを必要としないバージョン管理リポジトリで自己完結できるように、すべてを手動でインストールすることでした。setup.py ファイルを確認しましたが、どのようにインストールが行われるかを判断できません。– ソヴィウト 10 月 25 日 10:06

これを実現するためにvirtualenvを使用しないのはなぜですか? env をソース管理にプッシュすることもできますが、これは通常の使用法ではありません。

参照: http://www.virtualenv.org/en/latest/

于 2012-10-28T17:10:36.890 に答える