鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ python 引入 __init__.py 中的方法報錯不存在

python 引入 __init__.py 中的方法報錯不存在

問題

在腳本 article.py 中引入當(dāng)前目錄下的 __init__.py 的內(nèi)容報錯 ImportError: cannot import name 'fake'

路徑

test/

__init__.py
article.py

文件 __init__.py 中

# -*- coding:utf-8 -*-
def fake():
    print('A')

文件 article.py 中

# -*- coding:utf-8 -*-
from . import fake
print(fake)

執(zhí)行 python article.py 報錯提示:

Traceback (most recent call last):
  File "article.py", line 2, in <module>
    from . import fake
ImportError: cannot import name 'fake'

如何在 article.py 中引入 __init__.py 中的內(nèi)容

回答
編輯回答
孤客

form test import fake

2017年3月29日 07:51
編輯回答
故人嘆

__init__.py 是給包用的,你導(dǎo)入的.是什么意思...

2017年5月23日 12:32
編輯回答
過客

臨時的解決方式就是 from __init__ import fake ,但這種寫法實在是太詭異了,這種方式就把 __init__.py 視為普通的 python 文件而已。 然而, __init__.py 給包使用的,一個特殊文件的存在,而例子的程序入口又視為要導(dǎo)入的模塊,實在是難受,就像吃飯時吃到了沙子。

包中的模塊部分要引入 __init__ 的變量的正確姿勢可以參照標(biāo)準(zhǔn)庫的處理方式:

圖片描述

希望對你有幫助。

2018年6月12日 19:49
編輯回答
舊時光

感覺是一個奇怪的結(jié)構(gòu),首先上解決方法:

from __init__ import fake

應(yīng)該可以。

但是還是不推薦這么做,直接寫__init__import里可能會導(dǎo)致以后的導(dǎo)入問題。建議把article.py移到\test外。然后再用from test import fake。究其原因在于article.py是你要導(dǎo)入的模塊的本事一部分,如果直接用from . import fakefrom test import fake來導(dǎo)入會報錯。

最后FYI,用\test這個命名可能和python自帶的test重合,建議用個別致一點的名字。

2018年1月11日 22:08
編輯回答
挽青絲

這樣試試

form test import fake
2017年1月2日 12:54