init
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								組織/EverfortuneAI/resources/should_setup_py_be_deleted.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								組織/EverfortuneAI/resources/should_setup_py_be_deleted.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 467 KiB | 
							
								
								
									
										81
									
								
								組織/EverfortuneAI/{Note} Packaging Python Project.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								組織/EverfortuneAI/{Note} Packaging Python Project.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,81 @@ | ||||
| --- | ||||
| author: deng | ||||
| date: "20250103" | ||||
| category: Note | ||||
| tags: | ||||
|   - Python | ||||
|   - Packaging | ||||
|   - PyProject | ||||
| --- | ||||
|  | ||||
| [image resource](https://packaging.python.org/en/latest/guides/modernize-setup-py-project/) | ||||
|  | ||||
| - Abstract | ||||
| 	- 將辛辛苦苦寫出來的python專案打包發布至你想發布的地方! | ||||
| - Concept | ||||
| 	- 工作分成兩階段 | ||||
| 		1. 將原始碼封裝成whl檔,稱為build,常見的build engine有[setuptools](https://setuptools.pypa.io/en/latest/)或是[hatchling](https://pypi.org/project/hatchling/) | ||||
| 		2. 將whl檔發佈(不管是公開的[PyPI](https://pypi.org/)還是私人的[pip server](https://hub.docker.com/r/pypiserver/pypiserver)),可透過[twine](https://github.com/pypa/twine)進行發佈 | ||||
| - Steps | ||||
| 	1. 在Python環境中安裝[setuptools](https://pypi.org/project/setuptools/)及[twine](https://pypi.org/project/twine/)(也可以使用其他build engine) | ||||
| 	2. 依據[官方文件](https://packaging.python.org/en/latest/tutorials/packaging-projects/)改造你的專案結構,並添加LICENSE、README.md與pyproject.toml檔案 | ||||
| 	3. 依據需求填寫上述三檔案,pyproject.toml內容可參考Note最後之範例程式碼 | ||||
| 	4. 執行`python -m build`指令建立whl檔案,該檔將會生成於dist資料夾中 | ||||
| 	5. 執行`twine upload dist/*`將專案上傳至PyPI(需事先申請帳號),或者先上傳至[TestPyPI](https://packaging.python.org/en/latest/guides/using-testpypi/)進行測試(同樣地也需要事先申請帳號哦) | ||||
| - Note | ||||
| 	- 使用setup.py進行封裝雖然很常見於各種教學文件中(甚至是GPT-4o給的答案),但Python[官方文件](https://packaging.python.org/en/latest/)現在都使用pyproject.toml進行套件封裝,如封面所示(所以讀文件吧,親愛的工程師) | ||||
| 	- 若想進行發布測試可使用官方提供的測試伺服器[TestPyPI](https://test.pypi.org/)(其資料庫會定期清理資料,發布的套件與使用者帳號可能都會被刪除) | ||||
| 	- 用ChatGPT生成LICENSE還蠻方便的呢,即便一些在prompt中沒提到的細節它也會留意到,修改完的文件需要請主管確認範圍,再請法務部門審閱,之後就能加進套件了 | ||||
| 	- 以下為pyproject.toml範例程式碼 | ||||
|  | ||||
| ```toml | ||||
| # pyproject.toml | ||||
| # | ||||
| # author: deng | ||||
| # date  : 20250103 | ||||
|  | ||||
| [build-system] | ||||
| requires = ["setuptools>=61.0"] | ||||
| build-backend = "setuptools.build_meta" | ||||
|  | ||||
| [tool.setuptools.packages.find] | ||||
| where = ["src"] | ||||
|  | ||||
| [tool.setuptools.package-data] | ||||
| "PlayYourHeart.data" = ["*.csv"] | ||||
| # this can package additional data in project | ||||
|  | ||||
| [project] | ||||
| name = "PlayYourHeart" | ||||
| version = "0.1.0" | ||||
| authors = [ | ||||
|   { name="deng", email="gt810034@gmail.com" }, | ||||
| ] | ||||
| maintainers = [ | ||||
|   { name="deng", email="gt810034@gmail.com" }, | ||||
| ] | ||||
| description = "Let's enjoy." | ||||
| readme = "README.md" | ||||
| license = {file = "LICENSE"} | ||||
| dependencies = [ | ||||
|   "numpy~=1.26.4", | ||||
|   "scipy~=1.14.1", | ||||
|   ... | ||||
| ] | ||||
| requires-python = "==3.10.*" | ||||
| classifiers = [ | ||||
|     "Programming Language :: Python :: 3", | ||||
|     "Operating System :: Unix" | ||||
| ] | ||||
|  | ||||
| [project.optional-dependencies] | ||||
| dev = [ | ||||
|   "pytest", | ||||
|   "flake8", | ||||
|   "pre-commit" | ||||
| ] | ||||
| # use "pip install xxx.whl[dev]" to install them | ||||
|  | ||||
| [project.urls] | ||||
| Gitlab = "..." | ||||
| ``` | ||||
		Reference in New Issue
	
	Block a user