[英]How to load 2 functions with the same name from 2 python files with the same name?
我遇到了導入問題。 我想要做的是從同名的模塊中導入 2 個同名的函數。 請注意,我是在 Pycharm 中執行此操作的。
我有以下目錄結構:
test_import
|--foo.py
|--main.py
|--test
|--foo.py
代碼
test_import 文件夾中的foo.py
如下所示:
def print_arg(x):
print('print 1: {}'.format(x))
test 文件夾中的foo.py
如下所示:
def print_arg(x):
print('print 2: {}'.format(x))
這是我在main.py
中執行print_arg
導入的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
其他目錄中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
確實有效。 但是我不想更改文件名。
所以我有兩個問題:
有人可以解釋我這里發生了什么嗎?
導入這兩個函數而無需更改文件(模塊)名稱的更好方法是什么?
首先,您必須在 test 文件夾中添加一個空的__init__.py
文件,以便可以導入第二個 foo 文件。
其次,您必須在導入時寫入第二個文件的完整相對路徑。 現在,您將同時導入第一個 foo 文件。
只需將第二個導入行修改為:
from test.foo import print_arg as print_arg_2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.