繁体   English   中英

从virtualenv中的另一个文件夹导入

[英]importing from another folder in virtualenv

我正在遵循Flask Mega教程 ,一旦进入第二部分并重组我的文件夹结构以匹配它们的文件夹结构,我就遇到了问题,我无法导入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软件包已安装到/ flask / lib / site-packages。

我的问题:如何引用flask / site-packages的子文件夹?

我已经阅读了python 导入系统文档,并且从阅读第一遍的过程中可以了解到这一点,我可能需要做一些类似的操作,例如flask import flask.Flask之类。

更新 :因此,在目录周围进行cd检查并检查了pip列表后,我意识到我的应用程序目录无法访问flask。 我在应用程序目录中运行了pip install flask。 现在,我的网站可以运行,但是我不确定这是否是使用Python进行操作的最佳实践。 请提供一些清晰的信息,说明最佳做法是安装软件包以及软件包所在的位置。

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

“无模块名的应用程序 ;‘应用’是一个包,并不能直接执行。

我能够像我提到的那样运行python run.py ,但是我不能像您提到的那样运行python -m app命令

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

虚拟环境

请参阅virtualenv的文档

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

  • flask目录是您的virtualenv,
  • 在posix系统上,您具有flask/bin子目录,或者
  • 在Windows系统上,您有flask\\Scripts子目录。

我假设您在posix系统上。

要激活您的virtualenv,请运行:

source flask/bin/activate

您的提示应更改为: (flask)$

要列出已安装的库,请使用pip

pip list

确保您看到烧瓶。 本教程鼓励您安装很多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服务器…

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM