gpt4 book ai didi

python - 导入python3.6和python3.7的区别

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:49 25 4
gpt4 key购买 nike

我对 python3.6 和 python3.7 中的导入有疑问。

我有以下目录结构:

.
└── lib
├── feature
│   ├── feature1.py
│   ├── __init__.py
│   └── new
│   ├── feature1.py
│   └── __init__.py
└── __init__.py

我在文件 lib/feature/__init__.py 中有以下内容:

from lib.feature.feature1 import Feature1

我在文件 lib/feature/feature1.py 中有以下内容:

import lib.feature.new.feature1 as new

class Feature1: pass

要重新创建我的环境,您可以使用以下内容:

mkdir lib
touch lib/__init__.py
mkdir -p lib/feature/new
echo "from lib.feature.feature1 import Feature1" > lib/feature/__init__.py
echo -e "import lib.feature.new.feature1 as new\nclass Feature1: pass" > lib/feature/feature1.py
touch lib/feature/new/__init__.py
touch lib/feature/new/feature1.py

当我用 python3.7 运行这段代码时,它运行得非常好。当我使用 python3.6 运行此代码时,出现以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "***/import_test/lib/feature/__init__.py", line 1, in <module>
from lib.feature.feature1 import Feature1
File "***/import_test/lib/feature/feature1.py", line 2, in <module>
import lib.feature.new.feature1 as new
AttributeError: module 'lib' has no attribute 'feature'

所以我的问题是,当您使用 python3.6 或 python3.7 运行代码时,为什么会有不同的结果?

为了解决这个问题,我将 lib/feature/feature1.py 中的导入更改为:

from .new import feature1 as new

为了测试,我只是转到 python 并尝试导入模块:

import_test$ python
Python 3.6.8 (default, Dec 25 2018, 00:00:00)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lib.feature

更改后,它也适用于 python3.6。

提前致谢。

最佳答案

这是一个 bug使用在 Python 3.7 中修复的“别名”导入(import .. as)。

关于python - 导入python3.6和python3.7的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57615877/

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