Pyhton3.6, 使用的是Pycharm
1、
同級目錄導入包可使用方式如下;(直接運行.py文件時)
from test_import2 import Css2 import test_import2 (直接使用import) from testwork.test_import2 import Css2 (這種testwork下需要有__init__.py文件,才會把testwork作為一個python的包應用,文件可以是空的,)
包結構如圖
代碼文件
test_import2 class Css2(): def __init__(self): pass def fun2(self): print('t2') test_import1 import sys from .test_import2 import Css2 def aa(): print(sys.path) Css2().fun2() if __name__ == '__main__': print(sys.path) Css2().fun2() test_import3 from testwork import test_import1 test_import1.aa()
在test_import1使用from .test_import2 import Css2 時提示報錯
Traceback (most recent call last):
File "E:/pycharm/testwork/test_import1.py", line 3, in <module>
from .test_import2 import Css2
ModuleNotFoundError: No module named '__main__.test_import2'; '__main__' is not a package
__main__表示程序入口,這里也就是文件本身,意思是文件不是一個Python的包
加"."后就報這個錯誤
但網上看到其他的資料,和lib/site-pakages中在引用同級文件時也大量采用了 from .models import xx類似的形式;
一番折騰下,特別是在site-pakages的requests庫下添加測試文件,在使用類似requests的引用,發現也可以使用from .models import xx形式的;
最后就像上面建了test_import3,調用test_import1,而test_import1使用from .models import xx形式調用test_import2
發現test_import3可以正常使用;
最后得出結論加"."的間接引用方式不能直接運行,但其它模塊可用通過調用他來使用;
2、
像圖片上這種,大量采用了--from pakages.models import xx 的引用同級目錄文件方式;
會出現報錯,1、可能是包缺少__init__.py文件,不認可你的文件夾名是一個包
2、可能是應為沒有搜索路徑不對
使用 import sys sys.path 查看系統搜索路徑
要有一個路徑是包所在的父目錄下,也就是圖中“”“ethereum”這個目錄的上一級目錄;
解決方法是配置搜索路徑;(也可以直接把包扔到搜索路徑下)
簡單的方法在sys.path展示的路徑下(最好是選擇一個類似這個C:\Python36\Lib\site-packages的路徑,它第三方庫管理存儲的地方)添加xxx.pth文件(內容為你想要加載的包父目錄)
如圖我的ethereum文件夾就在E:\go\wen這個路徑下。
以上都是個人實踐總結,如有錯誤,歡迎大家指出