Python專案標準結構,我推薦這個!
這篇文章講什麼?
做資料分析習慣使用Jupyter notebook,編寫幾行程式碼,很方便得到結果。
但在真正專案中,一般使用PyCharm或VSCode開發。那有的小夥伴就問了,專案檔案目錄有沒有一個標準的結構?
應該沒有唯一的統一標準,但Python社群大佬Kenneth Reitz在2013年提出一個Python專案目錄結構,推薦你日後專案中參考。
Python專案推薦結構
Kenneth推薦目錄結構,如下所示:
samplemod-master
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.rst
├── docs
│ ├── Makefile
│ ├── conf.py
│ ├── index.rst
│ └── make.bat
├── requirements.txt
├── sample
│ ├── __init__.py
│ ├── core.py
│ └── helpers.py
├── setup.py
└── tests
├── __init__.py
├── context.py
├── test_advanced.py
└── test_basic.py
一共3個資料夾,17個檔案。
先來看看第一個資料夾docs,它是專案相關文件,包括依賴包安裝的Makefile和make.bat,專案配置conf.py,專案介紹文件index.rst,是比README.rst更細化的一個文件,README.rst更像一個專案總覽。
第二個資料夾sample,在Python中一般叫做包(package),它是專案核心程式碼,一般會有多個這種包,__init__.py是Python包包括的檔案。core.py和helpers.py是sample包裡兩個核心模組。
第三個包tests,是對應於sample包的單元測試包,裡面的模組名稱一般以test開頭,測試sample裡的每個模組。
setup.py是做什麼的?
有了上面三個最主要的包外,檔案最重要的有setup.py,這個檔案是做什麼的?
簡單來說,setup.py是和打包相關的配置模組,一般結合setuptools。
有了setup.py,我們就可以安裝包到本地全域性環境,或者上傳到PyPi,這樣全世界開發者都有機會搜尋到你的包,並使用pip安裝上你的包。
裡面程式碼相對比較標準和固定,比如在這個專案裡程式碼如下:
from setuptools import setup, find_packages
with open('README.rst') as f:
readme = f.read()
with open('LICENSE') as f:
license = f.read()
setup(
name='sample',
version='0.1.0',
description='Sample package for Python-Guide.org',
long_description=readme,
author='Kenneth Reitz',
author_email='[email protected]',
url='https://github.com/kennethreitz/samplemod',
license=license,
packages=find_packages(exclude=('tests', 'docs'))
)
看到這裡面用到README.rst和LICENSE檔案,並且指定打哪些包分發出去。
以上就是本次分享的所有內容,想要了解更多歡迎前往公眾號:Python 程式設計學習圈,每日干貨分享
- Python 什麼情況下會生成 pyc 檔案?
- 函式和方法的裝飾器
- Python 任務自動化工具:nox 的配置與 API
- 你可能不知道的 Python 技巧
- 進一步學習 nox 教程,輕鬆掌握命令列用法
- Python 中更優雅的日誌記錄方案
- 更好用的 Python 任務自動化工具:nox 官方教程
- 如何使用 Python 操作 Git 程式碼?GitPython 入門介紹
- Python 海象運算子 (:=) 的三種用法
- 如何利用現有加密方案保護你的 Python 程式碼
- Python 為什麼要保留顯式的 self ?
- Python 浮點數的冷知識
- Python 記憶體分配時的小祕密
- 如何通過測試提升 Python 程式碼的健壯性
- 推薦5個超級實用的 Python 模組,不知道就out啦!
- Python 中幾種屬性訪問的區別
- Python 之父新發文,將替換現有解析器
- Python中tuple =賦值的四個問題
- 判斷檔案的幾種方法及其優劣對比
- 理清 WebSocket 和 HTTP 的關係