當前位置:首頁 » 編程語言 » python工程的目錄結構

python工程的目錄結構

發布時間: 2022-07-08 01:35:23

python import路徑是什麼

以下為純手打,下面給幾個demos:

說明:
moles所在的目錄在python里叫package, 下面是一個名為 IsDir的package(實際上就是一個目錄), package下面有4個moles(A, B, C, D)和一個__init__.py文件,目錄結構如下:
IsDir/A.py B.py C.py D.py __init__.py大體來講,有兩種方法可以調用某目錄下(包括遞歸目錄)的moles.

一. __init__.py為空時

1.1 以下為調用moleA的代碼:
#!/usr/bin/env pythonfrom IsDir import AA.say()輸出:
This is mole A!1.2 如果想調用moleA,B,C,D呢?
方法1.
#!/usr/bin/env pythonfrom IsDir import Afrom IsDir import Bfrom IsDir import Cfrom IsDir import DA.say()B.say()C.say()D.say()方法2.
#!/usr/bin/env pythonimport IsDir.Aimport IsDir.Bimport IsDir.Cimport IsDir.Dfrom IsDir import *A.say()B.say()C.say()D.say()錯誤示例1:
#!/usr/bin/env pythonimport IsDir.AA.say()錯誤示例2:
#!/usr/bin/env pythonfrom IsDir import *A.say()錯誤的原因:
IsDir/目錄下__init__.py 為空時,直接import IsDir.A 或者from IsDir import *是無效的.
從官方文檔里可以看到,__init__.py 里沒有__all__ = [mole1,mole2,...]時,
from IsDir import * 只能保證IsDir被imported, 所以此時IsDir里的moles是無法被imported,此時只有如我上面所寫的代碼所示才能正確執行,否則是錯誤的。官方解釋為:import IsDir.A並無任何意義,只有接著執行from IsDir import *後,import IsDir.A語句里的mole A才會被定義,所以完整的調用因改為: 1. import IsDir.A 2. from IsDir import *。二. __init__.py用all=[...]指定該package下可以被imported進去的mole

__init__.py里寫入如下內容:
% cat IsDir/__init__.py__all__ = ["A","B"]然後使用之:
#!/usr/bin/env pythonfrom IsDir import *A.say()B.say()結果:
% python test.py This is mole A!This is mole B!錯誤實例:
#!/usr/bin/env pythonfrom IsDir import *C.say()以上示例之所以錯誤,是因為C並沒有在__all__ = ["A","B"]里制定,由此可見,package IsDir下面的__init__.py里,__all__=[...]具有隔離moles的作用。

補充:
mole A, B, C,D里我分別只定義了一個method, 例如,以下為mole A的code:
% cat IsDir/A.pydef say(): print "This is mole A!"後記:
謝謝這位同學,回答你的問題感覺很有收獲,順便又把python溫習了一遍。回頭把這些總結貼到我的blog上以上為手寫,望採納,共勉。

=============================================================

老子寫了這么多居然採用了另一個簡陋的答案,mlgb的,枉我熬夜給你答題。這種白痴樓主就不配在這里問問題。

㈡ 怎麼樣理解一個python項目的各種文件

在Python中引用是非常簡單的事情,這里需要清楚三個概念就可以了包、模塊、類。類這個就不用說了。

模塊對應的是一個.py文件,那麼mole_name就是這個文件去掉.py之後的文件名,py文件中可以直接定義一些變數、函數、類。

那麼包我們可以看作一個包含__init__.py和一系列.py文件的文件夾,這樣做的目的是為了區別包和普通字元串。

importmole_name

frompackage_nameimportmole_name

frompackage_nameimport *

那麼如何import時,python解釋器如何才能找到該模塊放置的文件位置呢?python尋找模塊的優先順序如下:

1、當前文件目錄

2、環境變數PYTHONPATH

3、sys.path(list類型)

sys.path是list類型,我們可以通過insert(), append()方法來增加模塊導入的搜索路徑,如:

import sys

path = 「……」 #需要增加的路徑

sys.path.insert(0, path)

在import模塊時,該模塊的頂層代碼將會被執行一次。如果該模塊被import多次,例如import A, import B.其中B模塊本身也有import A,那麼只在第一次被import的時候頂層代碼會被執行。

模塊能像包含函數定義一樣,可包含一些可執行語句。這些可執行語句通常用來進行模塊的初始化工作。這些語句只在模塊第一次被導入時被執行。這非常重要,有些人以為這些語句會多次導入多次執行,其實不然。

模塊在被導入執行時,python解釋器為加快程序的啟動速度,會在與模塊文件同一目錄下生成.pyc文件。我們知道python是解釋性的腳本語言,而.pyc是經過編譯後的位元組碼,這一工作會自動完成,而無需程序員手動執行。

什麼時候你應該使用frommoleimport?

  • 如果你要經常訪問模塊的屬性和方法,且不想一遍又一遍地敲入模塊名,使用frommoleimport。

  • 如果你想要有選擇地導入某些屬性和方法,而不想要其它的,使用frommoleimport。

  • 如果模塊包含的屬性和方法與你的某個模塊同名,你必須使用importmole來避免名字沖突。

  • 除了這些情況,剩下的只是風格問題了,你會看到用兩種方式編寫的Python代碼。

    盡量少用from mole import *,因為判定一個特殊的函數或屬性是從哪來的有些困難,並且會造成調試和重構都更困難。

    其它要點:

    在創建許許多多模塊後,我們可能希望將某些功能相近的文件組織在同一文件夾下,這里就需要運用包的概念了。包對應於文件夾,使用包的方式跟模塊也類似,唯一需要注意的是,當文件夾當作包使用時,文件夾需要包含__init__.py文件,主要是為了避免將文件夾名當作普通的字元串。__init__.py的內容可以為空,一般用來進行包的某些初始化工作或者設置__all__值,__all__是在from package-name import *這語句使用的,全部導出定義過的模塊。

    那麼我們平常新建文件的時候,都是建一個.py文件(類似java,但是python不用建立類,是以模塊為載體)至於怎樣組織包就要功能需要了

    在C/C++/Java中,main是程序執行的起點,Python中,也有類似的運行機制,但方式卻截然不同:Python使用縮進對齊組織代碼的執行,所有沒有縮進的代碼(非函數定義和類定義),都會在載入時自動執行,這些代碼,可以認為是Python的main函數。

    每個文件(模塊)都可以任意寫一些沒有縮進的代碼,並且在載入時自動執行,為了區分主執行文件還是被調用的文件,Python引入了一個變數__name__,當文件是被調用時,__name__的值為模塊名,當文件被執行時,__name__為'__main__'。這個特性,為測試驅動開發提供了極好的支持,我們可以在每個模塊中寫上測試代碼,這些測試代碼僅當模塊被Python直接執行時才會運行,代碼和測試完美的結合在一起。

    典型的Python文件結構:

    python import模塊方法

    python包含子目錄中的模塊方法比較簡單,關鍵是能夠在sys.path裡面找到通向模塊文件的路徑。
    下面將具體介紹幾種常用情況:
    (1)主程序與模塊程序在同一目錄下:
    如下面程序結構:
    `-- src
    |-- mod1.py
    `-- test1.py
    若在程序test1.py中導入模塊mod1, 則直接使用importmod1或from mod1 import *;

    (2)主程序所在目錄是模塊所在目錄的父(或祖輩)目錄
    如下面程序結構:
    `-- src
    |-- mod1.py
    |-- mod2
    | `-- mod2.py
    `-- test1.py
    若在程序test1.py中導入模塊mod2, 需要在mod2文件夾中建立空文件__init__.py文件(也可以在該文件中自定義輸出模塊介面); 然後使用 from mod2.mod2 import * 或import mod2.mod2.

    (3)主程序導入上層目錄中模塊或其他目錄(平級)下的模塊
    如下面程序結構:
    `-- src
    |-- mod1.py
    |-- mod2
    | `-- mod2.py
    |-- sub
    | `-- test2.py
    `-- test1.py
    若在程序test2.py中導入模塊mod1和mod2。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立該文件。然後調用方式如下:
    下面程序執行方式均在程序文件所在目錄下執行,如test2.py是在cd sub;之後執行python test2.py
    而test1.py是在cd src;之後執行python test1.py; 不保證在src目錄下執行python sub/test2.py成功。
    import sys
    sys.path.append("..")
    import mod1
    import mod2.mod2

    (4)從(3)可以看出,導入模塊關鍵是能夠根據

㈢ Python學習手冊的目錄

《Python3 教程》
Python3 基礎語法
Python3 基本數據類型
Python3 解釋器
Python3 注釋
Python3 運算符
Python3 數字(Number)
Python3 字元串
Python3 列表
Python3 元組
Python3 字典
Python3 編程第一步
Python3 條件控制
Python3 循環語句
Python3 迭代器與生成器
Python3 函數
Python3 數據結構
Python3 模塊
Python3 輸入和輸出
Python3 File
Python3 OS
Python3 錯誤和異常
Python3 面向對象
Python3 標准庫概覽
Python3 實例
Python3 正則表達式
Python3 CGI編程
Python3 MySQL
Python3 網路編程
Python3 SMTP發送郵件
Python3 多線程
Python3 XML解析
Python3 JSON
Python3 日期和時間
Python3 內置函數

㈣ 請教個pyqt做顯示目錄結構的問題

默認通過PyQt設計的界面是沒有代碼的,只會生成為一個.ui的文件(D:\Programs\Python\Lib\site-packages\PyQt4\uic)。我們就是通過Python提供的工具將這個文件轉換為Python的腳本,具體方法如下: 在ui所在的文件夾下執行下面的命令:pyuic.py ...

㈤ Python 蛋疼的單元測試,有什麼好的目錄結構

根目錄下建立一個 tests

然後按照 test_UNIT.py 這種格式來命名,如果代碼量較多則根據功能建立些子文件夾來分分類,就好了

可以參考 requests, django 的源碼來看

㈥ python怎樣爬取網站目錄結構

抓取每一頁的所有a標簽,採集所有href屬性,分離域名,把此網站域名下的地址標記為採集入庫條件,然後計算第一次採集到的地址的hash,如果hash重復,則不入庫,否則入庫再迭代二次採集,直到所有href的hash都復為結束條件,程序則認為資料庫中已採集到此域下的所有地址,即可以開始抓站

㈦ 如何設計結構清晰的 Python 工程目錄結構

1. 使用專業的項目構建發布工具來構建項目目錄. 如 buildout . 其目錄結構絕對比自己創建來的漂亮.
2. log目錄最好不要放到項目里
3. 缺少 setup.py
4. 缺少 requirements.txt

㈧ python import 路徑問題 新手

以下為純手打,下面給幾個demos:


說明:

moles所在的目錄在python里叫package, 下面是一個名為 IsDir的package(實際上就是一個目錄), package下面有4個moles(A, B, C, D)和一個__init__.py文件,目錄結構如下:

IsDir/
A.pyB.pyC.pyD.py__init__.py

大體來講,有兩種方法可以調用某目錄下(包括遞歸目錄)的moles.


一. __init__.py為空時


1.1以下為調用moleA的代碼:

#!/usr/bin/envpython
fromIsDirimportA
A.say()

輸出:

ThisismoleA!

1.2 如果想調用moleA,B,C,D呢?

方法1.

#!/usr/bin/envpython
fromIsDirimportA
fromIsDirimportB
fromIsDirimportC
fromIsDirimportD
A.say()
B.say()
C.say()
D.say()

方法2.

#!/usr/bin/envpython
importIsDir.A
importIsDir.B
importIsDir.C
importIsDir.D
fromIsDirimport*
A.say()
B.say()
C.say()
D.say()

錯誤示例1:

#!/usr/bin/envpython
importIsDir.A
A.say()

錯誤示例2:

#!/usr/bin/envpython
fromIsDirimport*
A.say()

錯誤的原因:

IsDir/目錄下__init__.py為空時,直接importIsDir.A或者fromIsDirimport*是無效的.

從官方文檔里可以看到,__init__.py 里沒有__all__=[mole1,mole2,...]時,

fromIsDirimport* 只能保證IsDir被imported, 所以此時IsDir里的moles是無法被imported,
此時只有如我上面所寫的代碼所示才能正確執行,否則是錯誤的。官方解釋為:importIsDir.A並無任何意義,只有接著執行fromIsDirimport*後,importIsDir.A語句里的moleA才會被定義,所以完整的調用因改為: 1. import IsDir.A 2. from IsDir import *。

二. __init__.py用all=[...]指定該package下可以被imported進去的mole


__init__.py里寫入如下內容:

%catIsDir/__init__.py
__all__=["A","B"]

然後使用之:

#!/usr/bin/envpython
fromIsDirimport*
A.say()
B.say()

結果:

%pythontest.py
ThisismoleA!
ThisismoleB!

錯誤實例:

#!/usr/bin/envpython
fromIsDirimport*
C.say()

以上示例之所以錯誤,是因為C並沒有在__all__=["A","B"]里制定,由此可見,packageIsDir下面的__init__.py里,__all__=[...]具有隔離moles的作用。


補充:

mole A, B, C,D里我分別只定義了一個method, 例如,以下為mole A的code:

%catIsDir/A.py
defsay():
print"ThisismoleA!"

後記:

謝謝這位同學,回答你的問題感覺很有收獲,順便又把python溫習了一遍。回頭把這些總結貼到我的blog上以上為手寫,望採納,共勉。


=============================================================


老子寫了這么多居然採用了另一個簡陋的答案,mlgb的,枉我熬夜給你答題。這種白痴樓主就不配在這里問問題。

㈨ python 創建骨架目錄結構的命令在哪裡輸入,怎麼輸入

你問的這些在python命令行中都無法實現 python命令行只是一個python命令執行環境,和linux命令行完全不一樣

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:235
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726