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/