python 同級目錄包導入問題,使用"."錯誤


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這個路徑下。

 

以上都是個人實踐總結,如有錯誤,歡迎大家指出

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM