Pyhton3.6, 使用的是Pycharmpython
一、測試
同級目錄導入包可以使用方式以下;(直接運行.py文件時)spa
from test_import2 import Css2 import test_import2 (直接使用import) from testwork.test_import2 import Css2 (這種testwork下須要有__init__.py文件,纔會把testwork做爲一個python的包應用,文件能夠是空的,)
包結構如圖code
代碼文件blog
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 packagepycharm
__main__表示程序入口,這裏也就是文件自己,意思是文件不是一個Python的包requests
加"."後就報這個錯誤it
但網上看到其餘的資料,和lib/site-pakages中在引用同級文件時也大量採用了 from .models import xx相似的形式;ast
一番折騰下,特別是在site-pakages的requests庫下添加測試文件,在使用相似requests的引用,發現也可使用from .models import xx形式的;
最後就像上面建了test_import3,調用test_import1,而test_import1使用from .models import xx形式調用test_import2
發現test_import3能夠正常使用;
最後得出結論加"."的間接引用方式不能直接運行,但其它模塊可用經過調用他來使用;
二、
像圖片上這種,大量採用了--from pakages.models import xx 的引用同級目錄文件方式;
會出現報錯,一、多是包缺乏__init__.py文件,不承認你的文件夾名是一個包
二、多是應爲沒有搜索路徑不對
使用 import sys sys.path 查看系統搜索路徑
要有一個路徑是包所在的父目錄下,也就是圖中「」「ethereum」這個目錄的上一級目錄;
解決方法是配置搜索路徑;(也能夠直接把包扔到搜索路徑下)
簡單的方法在sys.path展現的路徑下(最好是選擇一個相似這個C:\Python36\Lib\site-packages的路徑,它第三方庫管理存儲的地方)添加xxx.pth文件(內容爲你想要加載的包父目錄)
如圖個人ethereum文件夾就在E:\go\wen這個路徑下。
以上都是我的實踐總結,若有錯誤,歡迎你們指出