如何將python代碼打包成pip包(可以pip?install)
python代碼包的用途
當(dāng)你想打包一個(gè)目錄時(shí),需要現(xiàn)在目錄中放一個(gè)_init_.py,該文件叫包初始化文件,文件可以為空,也可以放一些代碼。舉例:
目錄hello
—— __init__.py
—— 代碼1.py
—— 代碼2.py
......
為什么這樣做?
如果你想import任何有_init_.py文件的目錄下的任何python代碼,python都會(huì)先運(yùn)行_init_.py,再運(yùn)行代碼文件。
添加_init_.py還有一個(gè)好處,就是在寫python代碼的時(shí)候不用擔(dān)心python解釋器找不到這個(gè)目錄,不用擔(dān)心你import時(shí)pycharm給你的包劃紅線了。
以前寫代碼是,如果你想導(dǎo)入其他項(xiàng)目的python代碼,往往會(huì)報(bào)錯(cuò),解決方法有三種:
- 將別人的代碼打成pip包,用pip安裝到自己的項(xiàng)目
- 在自己的代碼中寫sys.path.append(“別人代碼的目錄的路徑”)
- 在別人代碼目錄中創(chuàng)建一個(gè)__init__py
你也可以在包中添加一些全局變量或者全局類,供包中的其他代碼使用,舉例:
目錄hello
_init_.py
class birds:
legs = 2
wings = 2
head = 1
然后項(xiàng)目中其他任意位置的代碼都可以使用init中的包全局變量和類
格式是 from 目錄 import 類/變量
from hello import birds
編寫setup.py
和_init_.py同級(jí)目錄中創(chuàng)建一個(gè)setup.py,這個(gè)就是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(), # 系統(tǒng)自動(dòng)從當(dāng)前目錄開始找包 # 如果有的包不用打包,則只能指定需要打包的文件 #packages=['代碼1','代碼2','__init__'] #指定目錄中需要打包的py文件,注意不要.py后綴 license="apache 3.0" ) '''
- name : 打包后包的文件名
- version : 版本號(hào)
- author : 作者
- author_email : 作者的郵箱
- py_modules : 要打包的.py文件
- packages: 打包的python文件夾
- include_package_data : 項(xiàng)目里會(huì)有一些非py文件,比如html和js等,這時(shí)候就要靠include_package_data 和 package_data 來指定了。package_data:一般寫成{‘your_package_name’: [“files”]}, include_package_data還沒完,還需要修改MANIFEST.in文件.MANIFEST.in文件的語法為: include xxx/xxx/xxx/.ini/(所有以.ini結(jié)尾的文件,也可以直接指定文件名)
- license : 支持的開源協(xié)議
- description : 對(duì)項(xiàng)目簡(jiǎn)短的一個(gè)形容
- ext_modules : 是一個(gè)包含Extension實(shí)例的列表,Extension的定義也有一些參數(shù)。
- ext_package : 定義extension的相對(duì)路徑
- requires : 定義依賴哪些模塊
- provides : 定義可以為哪些模塊提供依賴
- data_files :指定其他的一些文件(如配置文件),規(guī)定了哪些文件被安裝到哪些目錄中。如果目錄名是相對(duì)路徑,則是相對(duì)于sys.prefix或sys.exec_prefix的路徑。如果沒有提供模板,會(huì)被添加到MANIFEST文件中。
生成whl和tar.gz文件包
python setup.py bdist_wheel # 打包為whl文件 python setup.py sdist # 打包為tar.gz文件
在和_init_.py同級(jí)目錄下有一個(gè)dist目錄,打包好的文件就在里面。
到此這篇關(guān)于如何將python代碼打包成pip包(可以pip install)的文章就介紹到這了,更多相關(guān)python代碼打包成pip包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)常見限流算法的示例代碼
在系統(tǒng)的穩(wěn)定性設(shè)計(jì)中,需要考慮到的就是限流,避免高并發(fā)環(huán)境下一下子把服務(wù)整垮了,本文為大家整理了一些Python實(shí)現(xiàn)的常見限流算法,希望對(duì)大家有所幫助2024-03-03python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例
這篇文章主要介紹了python實(shí)現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例,需要的朋友可以參考下2014-04-04Python 確定多項(xiàng)式擬合/回歸的階數(shù)實(shí)例
今天小編就為大家分享一篇Python 確定多項(xiàng)式擬合/回歸的階數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12OpenCV實(shí)現(xiàn)從灰度圖像切出Mask前景區(qū)域
本文主要介紹了如何利用OpenCV實(shí)現(xiàn)從灰度圖像,根據(jù)閾值,切出多個(gè)前景區(qū)域,過濾面積太小的圖像。文中的示例代碼講解詳細(xì),需要的可以參考一下2022-06-06python實(shí)現(xiàn)字符串和日期相互轉(zhuǎn)換的方法
這篇文章主要介紹了python實(shí)現(xiàn)字符串和日期相互轉(zhuǎn)換的方法,涉及Python中time和datetime函數(shù)使用技巧,需要的朋友可以參考下2015-05-05