【问题标题】:python Import Error: no module named apppython导入错误:没有名为app的模块
【发布时间】:2016-07-11 09:41:53
【问题描述】:

首先,我在app 文件夹中创建了__init__.py

from flask import Flask

app = Flask(__name__)
from app import views

然后,我在同一个应用文件夹中创建了views.py

from app import app

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!

最后,我在另一个文件夹中创建了run.py

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

所以,我的烧瓶树就像

/microblog
    /app
        /__init__.py
        /views.py
    /flask
    /tmp
        /run.py

但是,当我尝试运行 run.py 时,出现错误

Traceback (most recent call last):
 File "/home/shubham/Microblog/tmp/run.py", line 2, in <module>
    from app import app 
ImportError: No module named app
[Finished in 0.2s with exit code 1]
[shell_cmd: python -u "/home/shubham/Microblog/tmp/run.py"]
[dir: /home/shubham/Microblog/tmp]
[path:      /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games]

【问题讨论】:

  • 尝试将run.pytmp移动到microblog下。我认为这只是一个PYTHONPATH 问题;你的 run.py 找不到你的应用模块。
  • 请不要标记您的文本编辑器。我们不在乎。
  • #llja 我试过了,但它给了我一个新错误,即“AttributeError: 'module' object has no attribute 'route'” 现在我该怎么办?

标签: python python-2.7 flask


【解决方案1】:

您的问题是您对导入、变量名和包之间的区别没有清楚的了解。以及导入的工作原理。

当您构建 Python 包时,通常会有包含 setup.pyREADME 和其他分类文件的顶级文件夹,然后是您的包文件夹。你可能想要这样的东西:

├── microblog
│   ├── __init__.py
│   ├── server.py
│   └── views.py
├── README
├── MANIFEST.in
└── setup.py

如果您真的不想将您的 URL 处理程序与您的应用程序放在同一个位置,那么您就有点倒退了。你应该这样做:

server.py

from flask import Flask
from . import views

app = Flask(__name__)
app.register_blueprint(views.microblog)


def run():
    app.run(debug=True)

views.py

from flask import Blueprint

microblog = Blueprint('microblog', __name__)

@microblog.route('/')
@microblog.route('/index')
def index():
    return 'Hello, world!'

setup.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from setuptools import setup

setup(
    name='microblog',
    version='0.1.0',
    description='My microblog',
    author='Me',
    author_email='me@example.com',
    url='http://my.cool.example.com',
    packages=[
        'microblog',
    ],
    entry_points={
        'console_scripts': [
            'start-my-blog = microblog.server:run'
        ],
    },
    package_dir={'microblog': 'microblog'},
    include_package_data=True,
    install_requires=['flask',
    ],
    license="BSD",
    zip_safe=False,
    keywords='',
    classifiers=[
        'Development Status :: 2 - Pre-Alpha',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',
        'Natural Language :: English',
        'Programming Language :: Python :: 3.4',
    ],
)

现在您可以自己创建一个 virtualenv,安装您的应用,然后运行它:

$ mkvirtualenv microblog
$ workon microblog
(microblog) $ python -m pip install -e .
# a bunch of install happens here, flask & what-not
$ start-my-blog

如果要更改要运行的命令的名称,可以在 setup.py 中进行。从这样的结构开始会为您省去很多麻烦。

【讨论】:

    猜你喜欢
    • 2015-02-09
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多