导入来自别名模块的名称,这可能吗?

2024-04-23 11:04:30 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试用Python进行以下构造时,我在第二行得到"No module named foo"

import my_package.my_very_long_module_name as foo
from foo import f1, f2, f3
from foo import a, b, c
from foo import x, y, z

my_very_long_module_name是文件夹my_package(文件夹中有文件__init__.py)中的模块(my_very_long_module_name.py)。你知道吗

为什么上面的第二行失败了?不允许我从别名模块导入名称吗?你知道吗

如果这种构造在Python中是不合法的,那么还有其他方法可以做到这一点吗?(


Tags: 模块nonamefrompyimport文件夹package
3条回答

你想要达到的目标可以通过我的修改来实现系统模块字典。你知道吗

import sys
import my_package.my_very_long_module_name as foo

sys.modules['foo'] = foo
from foo import f1, f2, f3
from foo import a, b, c
from foo import x, y, z


警告:这样做会为这个python会话全局注册foo,因此任何其他尝试import foo的模块都会以my_package.my_very_long_module_name结束

对于你的特殊情况,这可能是一个坏的方式去做这件事,因为全球的影响。但是,当需要全局重命名时,这可能很有用。你知道吗

虽然不能在import语句中使用变量是正确的,但是可以简单地访问模块的变量。你知道吗

因此,您可以:

a = foo.a

如果你坚持的话,你甚至可以写信给globals。不过,老实说,我鼓励您在代码中使用限定的foo.a。它会使它更可读。你知道吗

import my_package.my_very_long_module_name as foo
from foo import f1, f2, f3

第二行失败,因为python将尝试查找模块名foo.py,它不会使用刚刚导入的变量foo。你知道吗

您可以尝试以下方法:

import my_package.my_very_long_module_name as foo
f1, f2, f3 = foo.f1, foo.f2, foo.f3
del foo

相关问题 更多 >