从virtualenv

时间:2016-10-10 21:24:29

标签: python flask pip virtualenv

我正在关注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命令

1 个答案:

答案 0 :(得分:1)

我认为你的执行环境出了问题。以下是一些解释。

virtualenv

请参阅virtualenv

的文档

如果您已按照教程进行操作:

  • flask目录是你的virtualenv,
  • 在posix系统上,您有一个flask/bin子目录或
  • 在Windows系统上,您有一个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服务器......