網站首頁 編程語言 正文
python代碼包的用途
當你想打包一個目錄時,需要現在目錄中放一個_init_.py,該文件叫包初始化文件,文件可以為空,也可以放一些代碼。舉例:
目錄hello
?? ??? ?—— ?__init__.py
?? ??? ?—— ?代碼1.py
?? ??? ?—— ?代碼2.py
?? ??? ?......
為什么這樣做?
如果你想import任何有_init_.py文件的目錄下的任何python代碼,python都會先運行_init_.py,再運行代碼文件。
添加_init_.py還有一個好處,就是在寫python代碼的時候不用擔心python解釋器找不到這個目錄,不用擔心你import時pycharm給你的包劃紅線了。
以前寫代碼是,如果你想導入其他項目的python代碼,往往會報錯,解決方法有三種:
- 將別人的代碼打成pip包,用pip安裝到自己的項目
- 在自己的代碼中寫sys.path.append(“別人代碼的目錄的路徑”)
- 在別人代碼目錄中創建一個__init__py
你也可以在包中添加一些全局變量或者全局類,供包中的其他代碼使用,舉例:
目錄hello
_init_.py
class birds:
?? ?legs = 2
?? ?wings = 2
?? ?head = 1
然后項目中其他任意位置的代碼都可以使用init中的包全局變量和類
格式是 from 目錄 import 類/變量
from hello import birds
編寫setup.py
和_init_.py同級目錄中創建一個setup.py,這個就是pip包安裝的腳本。
setup.py
from setuptools import setup find_packages
setup(name='birds',
version='0.0.1',
description='birds atttributes and functions',
author='megnet',
author_email='2290906844@qq.com',
requires= ['numpy','matplotlib'], # 定義依賴哪些模塊
packages=find_packages(), # 系統自動從當前目錄開始找包
# 如果有的包不用打包,則只能指定需要打包的文件
#packages=['代碼1','代碼2','__init__'] #指定目錄中需要打包的py文件,注意不要.py后綴
license="apache 3.0"
)
'''
- name : 打包后包的文件名
- version : 版本號
- author : 作者
- author_email : 作者的郵箱
- py_modules : 要打包的.py文件
- packages: 打包的python文件夾
- include_package_data : 項目里會有一些非py文件,比如html和js等,這時候就要靠include_package_data 和 package_data 來指定了。package_data:一般寫成{‘your_package_name’: [“files”]}, include_package_data還沒完,還需要修改MANIFEST.in文件.MANIFEST.in文件的語法為: include xxx/xxx/xxx/.ini/(所有以.ini結尾的文件,也可以直接指定文件名)
- license : 支持的開源協議
- description : 對項目簡短的一個形容
- ext_modules : 是一個包含Extension實例的列表,Extension的定義也有一些參數。
- ext_package : 定義extension的相對路徑
- requires : 定義依賴哪些模塊
- provides : 定義可以為哪些模塊提供依賴
- data_files :指定其他的一些文件(如配置文件),規定了哪些文件被安裝到哪些目錄中。如果目錄名是相對路徑,則是相對于sys.prefix或sys.exec_prefix的路徑。如果沒有提供模板,會被添加到MANIFEST文件中。
生成whl和tar.gz文件包
python setup.py bdist_wheel # 打包為whl文件
python setup.py sdist # 打包為tar.gz文件
在和_init_.py同級目錄下有一個dist目錄,打包好的文件就在里面。
原文鏈接:https://blog.csdn.net/xuezhangjun0121/article/details/128907404
相關推薦
- 2022-09-08 Python數據分析基礎之異常值檢測和處理方式_python
- 2022-11-16 Python加載文件內容的兩種實現方式_python
- 2023-11-14 樹莓派上如何安裝anaconda/miniconda環境配置
- 2022-06-14 go語言中的udp協議及TCP通訊實現示例_Golang
- 2022-05-06 詳析Python面向對象中的繼承_python
- 2022-06-17 mongodb?數據塊的遷移流程分析_MongoDB
- 2022-10-02 echarts動態獲取Django數據的實現示例_python
- 2022-04-04 elementui組件select選擇不中的問題(組件select選擇器無法顯示選中的內容)
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支