我正在关注Flask Mega Tutorial,一旦我到达第二部分并重构我的文件夹结构以匹配他们,我就遇到了问题,我无法导入Flask。
我当前的文件夹结构如下
/FlaskTest
/app
/static, templates etc
/flask
/virtualenv folders etc
/tmp
run.py
据我所知,文件夹结构与顶级目录的命名不同。
在我的__init__.py文件(/app/__init__.py)中,我按照教程中的说明进行操作,
from flask import Flask
app = Flask(__name__)
from app import views
我收到导入错误“无法导入名称'Flask'”。我猜这个问题是因为烧瓶包安装在/ flask / lib / site-packages。
我的问题:如何引用flask / site-packages的子文件夹?
我已经阅读了python import system documentation,并且通过读取它的第一遍,我可以做到这一点,我需要做一些像烧瓶导入烧瓶那样的东西.Flask或其他东西到那个效果。
更新:所以在浏览目录并查看点子列表之后,我意识到我的app目录无法访问该栏。我在app目录中运行了pip install flask。现在我的网站运行了,但我不确定这是否是使用Python做事的最佳做法。请详细说明安装软件包的最佳实践以及软件包所在的位置。
更新2 :创建名为standalone的目录后。在这个文件夹中,我创建了一个名为standalone-test的虚拟环境。有一次,我做到了,我也是mkdir'ed app并从FlaskTest复制了它的内容,这样代码就可以了。我能够使用python run.py
运行run.py脚本,但我不能像你说的那样运行python -m app
而不会遇到错误。如果有帮助,则错误如下。
“没有模块名称应用。主要;'app'是一个包,无法直接执行。
我可以像我提到的那样运行python run.py
,但我无法像你提到的那样运行python -m app
命令
答案 0 :(得分:1)
我认为你的执行环境出了问题。以下是一些解释。
请参阅virtualenv
的文档如果您已按照教程进行操作:
flask
目录是你的virtualenv,flask/bin
子目录或flask\Scripts
子目录。我假设你在posix系统上。
要激活您的virtualenv,请运行:
source flask/bin/activate
您的提示应更改为:(flask)$
。
要列出已安装的库,请使用pip
:
pip list
确保你看到Flask。本教程鼓励你安装很多Flask插件,所以有很多Flask-Something ......
如果缺少Flask,请安装它:
pip install Flask
您的应用程序位于app
目录中,它有一个__init__.py
文件(它是一个Python包)。
在此文件中,您有:
from flask import Flask
app = Flask(__name__)
from app import views
在FlaskTest/
目录中,尝试运行此脚本:
cd FlaskTest/ # if not in this directory
python -m app
这应该导入Flask
,实现您的app
(但不要运行它),导入views
模块。
如果存在app/views.py
,则应该没有错误。
=>此时,我们模拟了run.py
导入的内容......
现在在run.py
目录中写FlaskTest/
:
#!flask/bin/python
from app import app
app.run(debug=True)
像这样运行:
python run.py
请注意,shebang #!flask/bin/python
不常见,但应该在本教程的上下文中工作。
这应该启动你的http服务器......