本文目錄一覽:
安裝管道的Python包的源文件問題,怎麼解決
1.換一個版本試試,如將1.2.3的版本換成1.2.4的版本,換個新的或更舊點的版本
2.將pip的方式 換成用easy_install的方式安裝,有時可以:)
3.下載zip源碼,解開後用python setup.py install 的方式安裝
4.都不管用的話,直接把源碼解開,將相應的目錄複製到site-packages目錄下面去
python包相對導入的陷阱是?
包相對導入的陷阱:混合使用,相比於Python 2.X的隱式包相對導入,以及Python 2.X和3.X中的顯式包相對導入點號語法,有些時候從 sys.path上一個路徑出發的絕對包導入會是更推薦的選擇。這一問題可能看上去難以理解,但是當你開始編寫自己的包,可能就會變得更加重要了。 如前所述,Python 3.X的相對導入語法和默認絕對導入搜索規則,讓包內導入變得顯式從而使其更容易被注意和被維護,而且允許你在一些命名衝突的情況下顯式地進行選擇。然而,你也必須注意到該模型帶來的下面兩個結果:在Python 3.X和2.X中,包相對導入語句的使用會隱式地將一個文件與一個包目錄的角色進行綁定,並禁止該文件通過其他方式被使用。在Python 3.X中,新的相對導入搜索規則改變意味著一個文件不能像在2.X中那樣同時扮演腳本和包模塊的角色。這些約束的理由有些微妙,不過由於下面的兩條同時成立:Python 3.X和2.X不允許隨意使用from .的相對導入語法,除非發起導入的文件本身作為包的一部分(即該文件在其他地方被導入)。Python 3.X的導入不會搜索一個包模塊自身的路徑,除非使用了from .的相對導入語法(或該模塊位於當前工作路徑、頂層腳本的主目錄下)。使用相對導入會阻止你在2.X和3.X中創建同時扮演可執行程序和外部可導入包角色的目錄項。此外,一些文件在3.X中不能像在2.X中那樣同時扮演腳本和包模塊的角色。就導人語句來說,這些規則可以歸結為下面的兩行代碼的形式:前一行在Python 2.X和3.X中都只用於包模式,而後一行在3.X中只用於程序模式。
最終的效果是不論2.X還是3.X中的文件,你都應該只選擇一種使用模式,即包模式(使用相對導入)或程序模式(使用簡單導入),並將真正的包模塊文件單獨放到一個子目錄中,與頂層腳本文件隔離開來。
另一方面,你可以嘗試手動改變sys.path(通常是一項脆弱並易出錯的任務)或總是通過絕對導入使用完整的包路徑,並且假定包的根目錄位於模塊搜索路徑上,來替代包相對導入語法或簡單導入。
解決python3在項目目錄下找不到包(No module named ‘views’)
一、首先看看目錄的結構:
二、我在search.py中導入views包下的production.py和search.py,運行search.py的時候直接報錯找不到views包,其實問題就在於包的搜索路徑,因為是在flaskr這個目錄下運行的,列印出來的包搜索路徑為([‘/project/my_flask_project/flaskr’, ‘/usr/local/python3/lib/python36.zip’, ‘/usr/local/python3/lib/python3.6’, ‘/usr/local/python3/lib/python3.6/lib-dynload’, ‘/usr/local/python3/lib/python3.6/site-packages’]),解釋器會把/project/my_flask_project/flaskr加入導搜索路徑,自然導包的時候,也會在這個路徑下搜索,找不到就報錯。
三、所以,知道問題所在了,只需要把這個項目的路徑加入到搜索路徑即可
sys.path.append(os.path.abspath(‘..’))
這個操作是把當前目錄的上一級目錄添加到包搜索路徑中,這樣問題就解決了
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/297433.html