我遇到进口问题。我想做的是从具有相同名称的模块中导入具有相同名称的2个函数。请注意,我正在Pycharm中进行此操作。
我有以下目录结构:
test_import
|--foo.py
|--main.py
|--test
|--foo.py
码
foo.py
在test_import文件夹中看起来像:
def print_arg(x):
print('print 1: {}'.format(x))
foo.py
在测试文件夹中看起来像:
def print_arg(x):
print('print 2: {}'.format(x))
这是我main.py
在其中导入的代码print_arg
:
import sys
from foo import print_arg as print_arg
print_arg(1)
sys.path.insert(1, './test')
from foo import print_arg as print_arg_2
print_arg(1)
print_arg_2(1)
我希望这可以打印
print 1: 1
print 1: 1
print 2: 1
但它打印
print 1: 1
print 1: 1
print 1: 1
不知何故,第二次导入不起作用,并print_arg_2
成为的引用print_arg
。通过以其他方式进行导入来说明这一点:
sys.path.insert(1, './test')
from foo import print_arg as print_arg_2
print_arg_2(1)
sys.path.pop(1)
from foo import print_arg
print_arg(1)
print_arg(1)
print_arg_2(1)
打印:
print 2: 1
print 2: 1
print 2: 1
将test / foo.py中的函数名称更改为print_arg_2
不起作用,这将导致错误。似乎foo.py
已在项目文件夹中创建了对它的引用,并且它尝试从那里导入,而不是在其他目录中查找sys.path
Traceback (most recent call last):
File "C:\Users\jeroe\AppData\Local\Programs\Python\Python37\lib\site-packages\IPython\core\interactiveshell.py", line 3326, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-2-10fe80aec78f>", line 5, in <module>
from foo import print_arg_2 as print_arg_2
ImportError: cannot import name 'print_arg_2' from 'foo' (C:\Users\jeroe\PycharmProjects\test_import\foo.py)
将foo.py
测试文件夹中的文件名更改为例如foo2.py
可以。但是我不希望更改文件名。
所以我有两个问题:
有人可以解释一下这是怎么回事吗?
有什么更好的方法来导入这两个函数而不必更改文件(模块)名称?
首先,您必须__init__.py
在测试文件夹中添加一个空文件,以便可以导入第二个foo文件。
其次,导入时必须将完整的相对路径写入第二个文件。现在,您正在两次导入第一个foo文件。
只需将第二个导入行修改为:
from test.foo import print_arg as print_arg_2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句