【问题标题】:importing from another folder in virtualenv从 virtualenv 中的另一个文件夹导入
【发布时间】:2017-02-19 09:19:00
【问题描述】:

我正在关注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,并且通过第一遍阅读它可以理解它,我可能需要执行类似 from flask import flask.Flask 或类似的操作。

更新:所以在 cd 浏览目录并检查 pip 列表之后,我意识到我的应用程序目录无法访问烧瓶。我在 app 目录中运行了 pip install flask 。现在我的网站运行了,但我不确定这是否是使用 Python 做事的最佳实践。请提供一些说明,说明安装软件包的最佳做法以及软件包所在的位置。

UPDATE 2:创建一个名为standalone 的目录之后。在这个文件夹中,我创建了一个名为standalone-test 的虚拟环境。有一次,我这样做了,我还 mkdir'ed 应用程序并从 FlaskTest 复制了它的内容,这样代码就会相同。我可以使用python run.py 运行run.py 脚本,但是我不能像您所说的那样运行python -m app 而不会遇到错误。如果有帮助,报错如下。

"没有模块名app.ma​​in;'app'是一个包,不能直接执行。

我可以运行python run.py,但我无法运行python -m app,正如你所说的

【问题讨论】:

  • 您需要从FlaskTest/ 子目录运行命令。

标签: python flask pip virtualenv


【解决方案1】:

我认为您的执行环境出了点问题。这里有一些解释。

虚拟环境

查看virtualenv的文档

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

  • flask 目录是您的虚拟环境,
  • 在 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 导入的内容……

现在在您的FlaskTest/ 目录中写入run.py

#!flask/bin/python
from app import app
app.run(debug=True)

像这样运行它:

python run.py

请注意,shebang #!flask/bin/python 不常见,但应该在本教程的上下文中起作用。

这应该会启动你的 http 服务器……

【讨论】:

  • 我肯定会再试一次,但我只是通过运行 pip install virtualenv 安装它,然后创建一个文件夹,运行 create 命令,然后运行 ​​activate.bat 脚本(Windows 系统)。附带的问题,有一个 init.py 文件使目录成为一个包?我将尝试创建另一个虚拟环境,看看我尝试运行教程的安装命令时的结果。
  • 所以我做了一些实验,当我在我的虚拟环境中时(我的提示符旁边有虚拟环境的名称),我 pip install flask,它会安装全球范围内。据我了解虚拟环境,这不是正常行为。我将在另一个目录中重新开始本教程。并分享我的结果/经验。
  • 用我的测试/结果更新了 OP。
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
相关资源
最近更新 更多