python 發包的方法 python分發包管理

2021-10-11 15:05:49 字數 2274 閱讀 3800

為什麼使用包管理?

python的模組或者原始檔直接可以複製到目標專案目錄中,就可以匯入使用了。

但是為了更多專案呼叫使用,或者共享給別人,就需要打包,或發布到網路,以便供人使用。目的也是為了復用。

pypi(python package lndex),公共的模組儲存中心,https://pypi,python.org/pypi

主要工具

distutils

官方庫didtutils,使用安裝架指令碼setup.py來構建、安裝包。

從2023年就是標準庫的一部分,直到2023年停止開發。

setuptools

它是替代distutils的增強版工具箱,包含easy_install工具,使用ez_setup.py檔案,支援egg格式的構建和安裝。

setuptools是包管理的核心模組。

後來,setuptools開發緩慢了,出現了基於setuptools的distribute來替代setuptools。22023年,這兩個專案重新合併,distrribute被廢棄,setuptools依然是python安裝打包的標準方式。

pippip目標包管理的事實標準。構建在setuptools之上,替代easy_install的。同樣提供豐富的包管理功能。

wheel

提供bdist_wheel作為setuptools的擴充套件命令,這個命令可以用來生成新打包格式wheel。

pip從1.4版本開始提供了乙個wheel子命令來安裝wheel包。當然,需要先安裝wheel模組,它可以讓python庫以二進位制形式安裝,而不需要在本地編譯。

使用setup.py打包

setup.py建立乙個源**分發包的例子,參照例子

檢視子命令

然後再在工程裡面新建乙個setup.pyw檔案,

setup如下:

#setup.py檔案

from distutils.core importsetup#匯入set函式並傳參

setup(name="m",

version="0.1",

description= 'python test m',

author="xpc",

author_email="[email protected]",

packages= ["m","m.m1","m.m2","m.m2.m21"]

)#name 名字#version 版本#packages = 打包列表#packages = ["m"]指定m,就會把m所有的非目錄子模組打包#["m","m.m1.m2.m3",],逐級建立目錄,但是只把m的所有非目錄子模組打包,把m.m1.m2.m3打包

#description 描述資訊#author 作者#url包的主頁,可以不寫

查詢命令的幫助

python setup.py cmd -help,可以直接進入資料夾,然後shift+右鍵,可以調出cmd命令視窗。

build命令,編譯

建立乙個build目錄

python setup.py build

以下是packages = ["m"]配置的結果。

在專案目錄下多了build目錄,有乙個lib子目錄,lib下就是模組m的目錄了。

m目錄下的*.py檔案被複製了,但是子目錄沒有被複製。

以下是packages = 【「m.m2.m21」】配置的結果。

可以看出,逐級構建了同樣的目錄結構,並只拷貝了m21的__init__。py檔案。

以下是packages = ["m","m.m2.m21"]配置的結果

build得到的檔案,直接拷貝到其他專案就可以用。

imstall命令,安裝

build後就可以install,直接執行

python setup.py install

如果沒有build,會先build編譯,然後安裝。

sdist命令,分發

sdist命令

python setup.py sdist

建立源**的分發包。

產生乙個dist目錄,裡面生成乙個帶版本號的壓縮包。

在其他地方解壓這個檔案,裡面有setup.py,就可以使用python setup.py install 安裝了,也可以pip install m-0.0.1.zip直接使用pip安裝這個壓縮包。

可以把自己寫好的模組發布在公共的pypi上,也可以搭建pypi私服,供企業內部使用。

pypi裡面的模組沒有太好的審核機制,不保證安全,請謹慎使用。

wheel包

安裝wheel依賴

pip install wheel

setup.py修改如下。

python實現約瑟夫 約瑟夫問題python實現

python語言之如何實現約瑟夫環問題 def josephus n,m if type n 60個人從1開始編號每人拿乙個號碼牌排成圈,從 1開始報數,第一次報數 totalnum 猴子總數 startnum 開始序號 intervalnum 間隔數def kingelect totalnum,s...

python介面程式設計 R程式語言的Python介面

正如 lgautier所指出的那樣,在這個問題上已經有了另乙個答案。我在這裡留下我的答案,因為它增加了將r作為新手的經驗,首先了解python。我同時使用python和r,並同意您作為r的新手的需要。由於您得到的任何答案都是主觀的,因此,根據我的經驗,我總結了幾點 但是不要指望在不學習兩者的情況下,...

python數列分段 按範圍分段的Python陣列

首先,定義你的 極 數 第二,根據這些 極 數生成間隔 第三,定義盡可能多的列表。在 然後,對於每個間隔,掃瞄列表並在相關列表中新增屬於該間隔的項 source 1,4,7,9,2,10,5,8 poles 0,3,6,25 intervals poles i poles i 1 for i in ...