gpt4 book ai didi

Python/Flask - 突然出现 "ImportError: No module named..."错误

转载 作者:行者123 更新时间:2023-12-01 01:19:23 25 4
gpt4 key购买 nike

我遇到了我认为在 Python 应用程序中相当常见的问题 - ImportError: No module named lib.handle_data - 但我对 Python/Flask 生态系统的经验还不够丰富真正理解为什么会发生这种情况,特别是因为我的代码一直在工作,直到我做了一些小调整并重新安装了一些依赖项。好吧,这就是它是如何下降的......

我正在开发一个 Flask 应用程序,直到不久前,它还运行良好。我意识到我没有在 setup.py 文件中包含依赖项的语义版本控制。最初,该文件如下所示:

from setuptools import setup

setup(
name='my_app',
packages=['my_app'],
include_package_data=True,
python_requires='>3.6.4',
install_requires=[
'flask',
'gtfs-realtime-bindings',
'gunicorn',
],
)

我改成这样:

from setuptools import setup

setup(
name='my_app',
packages=['my_app'],
include_package_data=True,
python_requires='>3.6.4',
install_requires=[
'flask==0.12.2',
'gtfs-realtime-bindings==0.0.5',
'gunicorn==19.7.1',
],
)

然后为了确保一切顺利,我运行了python setup.py install,一切似乎都很顺利 - 没有任何版本发生变化,因为这些是已经安装的版本。

但是,当我运行 flask run 时,服务器无法启动,并且出现错误:

import my_app.lib.handle_data as HandleData
ImportError: No module named lib.handle_data

并尝试通过gunicorn启动服务器

gunicorn my_app.my_app:app -b 0.0.0.0:8000

产生相同的错误(毫不奇怪,我确信,只是为了全面)。

这是文件结构:

setup.py
my_app/
|
- __pycache__/
- __init__.py
- my_app.py
- lib/
|
- __pycache__/
- __init__.py
- handle_data.py
- request.py

my_app/__init__.py 的内容是:

from .my_app import app

并且 my_app/lib/__init__.py 为空。

我的应用程序是如何损坏的?如何解决这个问题?

Python 版本为 3.6.4,在 macOS Mojave 10.14 上运行。如果我没有说清楚,在我进行此更改/重新安装 deps 之前,我的应用程序运行得很好。

最佳答案

您应该添加"my_app.lib"packages因为否则相应的子包和 my_app.lib.*模块将不会被安装。您可以通过以下方式检查现有安装

>>> import my_app
>>> my_app.__file__
'/path/to/virtualenv/lib/python3.6/site-packages/my_app/__init__.py'

现在检查相应的目录将显示 lib不见了。如果添加"my_app.lib"packages然后lib目录(包)也将被安装。

至于为什么它以前有效,而您没有更改任何有关包设置/结构的内容,我只能推测。然而,安装过程本身有一点会产生影响。如果您已将软件包安装在--editable中( -e ) 模式(或 python setup.py develop )1 在此之前,您的环境将包含 my-app.egg-link指向包的源目录而不是相关文件的副本。这样my_app.lib当然不会丢失(因为它包含在源目录中)。根据您的描述,您在应用更改后进行了“正常”安装,这需要 packages 中指定的完整结构。完整(也使用 --upgrade 将删除链接)。

<小时/>

<子>1。 --editable / -epip选择放置到源目录的链接而不是复制相关文件;使用setup.py直接对应的模式为develop ,即python setup.py develop .

关于Python/Flask - 突然出现 "ImportError: No module named..."错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53992552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com