문제

I have a Flask project which I've put the flask module (version 0.9) directly beside my app.py file. I've done this so that I can bundle everything into a version control repository that won't require anyone else using it to install additional Python modules.

I want to use flask-login so I've tried to manually install it by downloading the latest version and putting the flask_login.py file in my "local" flask/ext/ directory. However, while I can import flask and import flask.ext, I am unable to import flask.ext.login with Python throwing ImportError: No module named flask.ext.login. import flask.ext.flask_login throws an import error as well.

Is there something I have to do differently if Flask and it's extensions are local to the app.py?

도움이 되었습니까?

해결책

The solution is to put the flask_login.py file in the same directory as my app.py file. No modification of the flask/ext/__init__.py file is necessary.

The flask.ext module is intended only as a an extension importer, not a repository for installed extensions. Based on the import path, I thought the flask/ext folder was where extensions were to be copied. This was incorrect. Extensions simply need to be somewhere on the python path.

다른 팁

Python doesn't throw the exception in your case, this Flask module is responsible for modifying the standard import hook in the ext folder: https://github.com/mitsuhiko/flask/blob/master/flask/exthook.py

So, I don't think putting flask_login.py into flask/ext is the right way to use extensions in Flask. The documentation recommends to use pip install flask-login or python setup.py install. After that you can do:

import flask_login

If you still want to do it manually, remove the setup() call from ext/__ init__.py. It probably has a good reason why the Flask guys did it this way though :-)

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

Why not use virtualenv to achieve this? You can push your env to source control as well, although that's not normal usage.

See: http://www.virtualenv.org/en/latest/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top