Python編程基礎與應用第13章 虛擬環境與程序打包發布_第1頁
Python編程基礎與應用第13章 虛擬環境與程序打包發布_第2頁
Python編程基礎與應用第13章 虛擬環境與程序打包發布_第3頁
Python編程基礎與應用第13章 虛擬環境與程序打包發布_第4頁
Python編程基礎與應用第13章 虛擬環境與程序打包發布_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

13

虛擬環境與程序打包發布XXXX

大學

XX

學院XXX

教授2學習目標:掌握使用標準庫venv

創建虛擬環境的方法掌握模塊、包與庫的構建與發布方法掌握將Python

文件打包成exe

文件的方法思政內涵:通過對程序打包發布的學習,體會軟件資源分享的快樂,廣大學子要樹立樂于奉獻的精神。第

13

虛擬環境與程序打包發布313.1 Python

虛擬環境使用Python

開發項目免不了要安裝各種包。我們安裝的所有包都會被安裝到同一個目錄中供Python

調用。當兩個

Python

項目用到同一個包的不同版本或一個新項目需要用到的包會影響以前已經完成調試的項目的開發環境時,Python

開發環境就會出問題。虛擬環境可以解決以上問題,它會為每一個Python

項目創建一個隔離的開發環境,每個開發環境所安裝的包和依賴相互獨立,可以確保項目的開發環境互不干擾。每個項目都有一個獨立的虛擬環境(virtual

environment)。虛擬環境并不是什么新技術,主要是利用了操作系統中環境變量以及進程間環境隔離的特性,從計算機中獨立開辟出來的一個虛擬化環境,可以將這部分獨立環境視為一個容器,在這個容器中可以只安裝需要的依賴包,各個容器之間互相隔離、互不影響。在激活虛擬環境時,激活腳本程序會將當前命令行4程序的

PATH

修改為虛擬環境的路徑,這樣執行命令就會在被修改的

PATH

中查找,避免了原本

PATH

可以找到的命令,從而實現了

Python

環境的隔離。Python

3.3

之后的版本自帶標準庫venv,可以利用其創建虛擬環境。第三方工具也可以創建虛擬環境,如

virtualenv、pipenv、anaconda

等。本節將學習如何使用標準庫venv

創建虛擬環境。13.1.1 虛擬環境的創建在Windows

的命令行模式下,標準庫venv

創建虛擬環境的命令格式如下。python-mvenv

/path/env_name運行此命令將創建目標目錄(父目錄若不存在也將創建),并放置一個pyvenv.cfg

文件在其中,該文件中有一個

home

鍵,它的值指向運行此命令的

Python

安裝(目標目錄的常用名稱是.venv)。它還會創建一個Scripts

子目錄,其中包含Python

二進制文件的副本或符號鏈接(視創建環境時使用的平臺或參第

13

虛擬環境與程序打包發布5數而定)。它還會創建一個初始為空的lib\site-packages

子目錄。創建虛擬環境的步驟如下。在D

盤根目錄創建myenvs

目錄,用于保存虛擬環境。在

Windows

的命令行模式下,

執行命令:

python

-m

venvd:/myenvs/myenv1。執行以上命令后,D

盤myenvs

目錄下創建的虛擬環境myenv1

如圖

13.1所示。圖

13.1虛擬環境myenv1

內容6如果要創建指定Python

版本的虛擬環境,首先要安裝相應版本的Python,然后找到其安裝目錄,在安裝目錄下執行虛擬環境創建命令,這樣就完成了指定版本Python

虛擬環境的創建,步驟如下。安裝指定版本Python

環境。本書安裝的是Python

3.11

版本。在Windows

的命令行模式下,執行py

-0p

或where

python

命令,輸出各個版本的Python

安裝路徑列表。在

python -m venvd:/myenvs/myenv311。執行以上命令后,D

盤myenvs

目錄下創建的虛擬環境myenv311

如圖13.2

所示。第

13

虛擬環境與程序打包發布7圖

13.2 虛擬環境myenv311

內容虛擬環境的使用虛擬環境的激活首先在Windows

下運行cmd.exe(或powershell)程序進入命令行模式,然后在虛擬環境的指定文件夾

Scripts

下運行命令

activate.bat(

或activate.ps1),當命令提示符內的指針前方增加了虛擬環境名稱時,說明成功激活進入了虛擬環境,如圖

13.3

所示。8圖

13.3 激活并進入虛擬環境myenv311在虛擬環境下安裝包例如,當要進行

Web

應用程序的開發時,首先要安裝

Web

框架(Flask

等),在激活的虛擬環境下執行命令:pip

install

flask。執行命令后,site-packages目錄下就增加了Flask

框架的相關文件。查看虛擬環境下安裝的包在虛擬環境下,執行命令:pip

list。執行命令后會顯示虛擬環境下已經安裝的包信息,如圖

13.4

所示。第

13

虛擬環境與程序打包發布9圖

13.4 虛擬環境下已經安裝的包信息4.

保存和復制虛擬環境在虛擬環境下,執行命令:pip

freeze。執行命令后會以

requirements

文件格式顯示虛擬環境下已經安裝的包信息,如圖

13.5

所示。10圖

13.5

requirements

文件格式顯示包信息在虛擬環境下,執行命令:pip

freeze

>

requirements.txt。執行命令后將已安裝的包信息存入requirements.txt

文件中,這樣就保存了虛擬環境。把

requirements.txt

文件復制到其他虛擬環境下,然后在激活虛擬環境下執行命令:pip

install-r

requirements.txt。執行命令后就復制了與原來一樣的虛擬環境。第

13

虛擬環境與程序打包發布115.

退出虛擬環境在虛擬環境下,執行命令:deactivate。執行命令后即可退出虛擬環境。6.

改變虛擬環境所指向的實際Python

環境用記事本打開虛擬環境下的配置文件pyvenv.cfg,將

home

后面的路徑改為實際Python

環境的python.exe

文件路徑即可,如圖

13.6

所示。圖

13.6改變虛擬環境的指向127.

刪除虛擬環境通過Windows

命令直接刪除虛擬環境目錄即可刪除虛擬環境。虛擬環境的結構實際環境實際環境結構如圖

13.7

所示。lib

目錄下有第三方庫的安裝目錄site-packages

和標準庫,python.exe

解釋器文件與pip.exe

等其他文件不在一個目錄下。圖

13.7實際環境結構第

13

虛擬環境與程序打包發布132.

虛擬環境虛擬環境結構如圖

13.8

所示。虛擬環境中沒有標準庫的內容,應用中與實際環境共用標準庫。虛擬環境的

python.exe

解釋器文件與pip.exe

等其他文件均在scripts

目錄下。圖

13.8 虛擬環境結構

13.2 程序打包與發布Python

的軟件包一開始沒有官方的標準分發格式,后來不同的工具開始引入一些比較通用的歸檔格式,但是這些格式都不是官方支持的,存在元數據和14包結構彼此不兼容的問題。為解決這個問題,PEP427

定義了新的分發包標準,名為Wheel

標準。pip

等打包工具都支持這個標準。Python

程序打包一方面是構建成Python

庫;另一方面是打包成

exe

可執行文件。雖然庫是

Python

中常常提及的概念,但事實上

Python

中的庫只是一種對特定功能集合的統一說法,而非嚴格定義。Python

庫的具體表現形式為模塊(module)和包(package),Python

庫的構建工具有很多,如

distutils、setuptools

等。將

Python

文件打包成

exe

文件也有多種工具可以選擇,如PyInstaller、py2exe

等。下面先介紹模塊和包的構建,然后介紹distutils

和PyInstaller

打包工具的使用,并介紹如何發布第三方庫。13.2.1 模塊的構建與使用Python

模塊本質上是一個包含Python

代碼的.py

文件,模塊名就是文件名。假設現有文件demo.py,該文件中包含程序段P13.1。第

13

虛擬環境與程序打包發布15P13.1

demo.pydefadd(x,y):return

x+y那么demo.py

就是一個Python

模塊。利用import

語句或form-import

語句在當前程序中導入模塊,便可在當前程序中使用模塊內包含的代碼。例如,在當前程序中使用demo

模塊中定義的add()函數,示例代碼如程序段P13.2

所示。P13.2

導入

demo

模塊示例importdemores=test.add(11,22)print(res)運行代碼,輸出結果如下。1633模塊既能被導入其他程序中使用,也可以作為腳本直接使用。實際開發中,為了保證模塊實現的功能與預期相符,開發人員通常會在模塊文件中添加一些測試代碼,對模塊中的功能代碼進行測試。以

demo.py

文件為例,示例如程序段P13.3

所示。P13.3

模塊測試def

add(x,y):return

x+yif

name

==

'

main

':res=

add(11,22)print("函數

add(x,y)測試:x+y=%d"%res)當解釋器直接執行以上文件時,便可執行文件中if

語句后面的測試代碼,第

13

虛擬環境與程序打包發布17測試add()函數的功能。如果在其他文件中把以上文件作為模塊導入,則不會執行測試代碼。這個測試設計利用了模塊的

name

屬性,當模塊作為主模塊運行時,

name

取值為“

main

”,當模塊不作為主模塊運行時,

name

取值為“模塊名”。所以,代碼中的條件語句只有在模塊是主模塊運行時才執行測試代碼。這樣既達到了測試模塊功能的目的,又不影響模塊的使用。13.2.2 包的構建與使用當一個項目中有很多個模塊時,就需要再進行組織。將功能類似的模塊放到一起就形成了包。本質上,包就是一個包含

init

.py

文件的文件夾,如圖13.9

所示。18圖

13.9 package

包結構包下面可以包含模塊,也可以再包含子包(subpackage),就像文件夾中可以有文件,也可以有子文件夾一樣,如圖

13.10

所示。(a)

package

包結構圖

13.10(b)

package_a

子包結構包結構圖在圖

13.10

中,package

是上層的包,下面有一個子包

package_a,每個包中都有

init

.py

文件。假設導入模塊demo_a1.py,3

種導入語句格式和使用語句格式分別如下。第

13

虛擬環境與程序打包發布19格式一:import

package.package_a.demo_a1。在使用時,必須加完整名稱來引用:package.package_a.demo_a1.fun_a1()。格式二:frompackage.package_a

import

demo_a1。在使用時,可以直接使用模塊名引用:demo_a1.fun_a1()。格式三:from

package.package_a.demo_a1

import

fun_a1。在使用時,可以直接使用函數名或類名引用:fun_a1()。當使用from

package

import

item

這種語法格式時,item

可以是包、模塊,也可以是函數、類、變量。當使用

import

item1,

item2

這種語法格式時,item

必須是包或模塊。導入包的本質其實是“導入了包的

init

.py”文件。也就是說,“importpackage”意味著執行了包package

下面的

init

.py

文件。

init

.py

有以下

3

個核心作用。(1)

作為包的標識,不能刪除。20(2)

用來實現模糊導入。(3)

導入包實質是執行

init

.py

文件,可以在

init

.py

文件中進行包的初始化、統一執行代碼、批量導入等操作。在package

包下的

init

.py

文件中寫入代碼如程序段P13.4

所示。P13.4

init

.py

文件import

mathprint("已導入

package

包")在package

包同級目錄的demo.py

文件中寫入代碼如程序段P13.5

所示。P13.5

測試

init

.py

文件執行importpackageprint(package.math.pi)運行代碼,輸出結果如下。第

13

虛擬環境與程序打包發布21已導入

package

包3.141592653589793通過以上測試可以看出,Python

非常巧妙地通過

init

.py

文件將包轉換成了模塊的操作,因此,可以說“包的本質是模塊”。庫的構建Python

中的第三方庫是由Python

用戶自行編寫和發布的模塊或包。同樣地,用戶也可以將自己編寫的模塊和包作為庫發布。庫的構建與發布步驟如下。在與待發布的包同級的目錄中創建setup.py

文件。以圖

13.9

所示的包package

為例,此時的目錄結構如圖

13.9

所示。編輯setup.py

文件,在該文件中設置包中包含的模塊,示例代碼如程序段P13.6

所示。P13.6

構建庫22fromdistutils.coreimport

setupsetup(name='a',version='0.1.0',description='package

a',author=

'wzh',py_modules=

['a.a1','a.a2'])(3)

setup.py

文件所在目錄下打開命令行,使用

Python

命令構建Python

庫,具體如下。pythonsetup.py

build命令行執行以上命令,輸出信息如圖

13.11

所示。第

13

虛擬環境與程序打包發布23圖

13.11 構建庫的輸出信息輸出顯示構建成功。構架完成后,目錄結構如圖

13.12

所示。(a)

目錄結構圖

13.12(b)

構建的庫構建的目錄結構24在圖

13.12

中,build

目錄下的lib

文件夾就是通過Python

命令構建的庫。(3)

在setup.py

文件所在目錄下打開命令行,使用Python

命令創建庫的安裝包,具體如下。pythonsetup.py

sdist創建完成后,目錄結構如圖

13.13

所示。(a)

目錄結構圖

13.13(b)

安裝包創建的安裝包第

13

虛擬環境與程序打包發布25在圖

13.13

中,dist

目錄下的.tar

格式的文件就是通過Python

命令生成的庫的安裝包。安裝包可以自己安裝使用,也可以分享給他人或發布到網絡平臺。如果自己或他人希望在本地機安裝此包,則需要復制壓縮文件包package-0.1.0.tar,然后解壓,進入package-0.1.0

目錄,運行以下本地安裝命令。pythonsetup.py

install該命令最終會將demo_1.py、demo_2.py

復制到Python

環境存放第三方模塊的目錄。安裝成功后,直接使用import

導入即可使用該模塊。還可以在dist

目錄下,執行以下命令。pipinstall

.\package-0.1.0.tar此命令也會將demo_1.py、demo_2.py

復制到Python

環境存放第三方模塊的目錄。26庫的發布將自己開發好的模塊上傳到PyPI

網站上,使其成為公開的資源,可以讓全球用戶自由使用。在PyPI

官網中發布庫的步驟如下。

PyPI

官網注冊。PyPI

網站:。遠程上傳發布。進入

setup.py

文件所在目錄,使用命令“pythonsetup.py

sdist

upload”,即可將模塊代碼上傳并發布。管理發布的模塊。登錄

PyPI

官網,如果模塊已經上傳成功,當登錄

PyPI網站后便可在右側導航欄看到管理入口。單擊包名進入后可以對模塊進行管理,當然也可以從這里刪除模塊。分享第三方庫。模塊發布完成后,其他人只需要使用pip

就可以安裝模塊文件。如果你更新了模塊,其他人則可以通過

pip

install--upgrade

<模塊第

13

虛擬環境與程序打包發布27名>

命令來更新。當然,也可以將自己開發好的模塊上傳到GitHub

網站上,使其成為公開的資源,供全球用戶下載使用。

13.3 PyInstaller

庫打包Python

文件為exe

文件13.3.1

程序打包為exe

文件事實上,大部分用戶編寫的軟件很少需要發布到

PyPI

上供眾人下載,通常情況下軟件的使用者都是Windows

用戶,所以將Python

文件打包成一個可執行的exe

文件,直接在Windows

系統中運行才是主要的打包方式。將Python文件打包成exe

文件有多種工具可以選擇,如PyInstaller、py2exe

等,下面介紹PyInstaller

打包工具的使用方法。PyInstaller

是一個第三方庫,它能夠在Windows、Linux、Mac

OS

X

等操作系統中將

Python

源文件打包,通過對源文件打包,Python

程序可以在28沒有安裝Python

的環境中運行,也可以作為一個獨立文件,方便傳遞和管理。PyInstaller

可以在Windows、Mac

OS

X

和Linux

系統中使用,但并不是跨平臺的。如果希望打包成exe

文件,則需要在Windows

系統中使用PyInstaller進行打包工作;如果希望打包成

mac

app,則需要在

Mac

OS

系統中使用PyInstaller

進行打包工作。本節學習使用PyInstaller

將Python

文件打包成exe文件的方法。PyInstaller

庫的常用參數及其功能如表

13-1

所示。表

13-1 PyInstaller

庫的常用參數及其功能參數名功能描述-h,-help查看該模塊的幫助信息-F,-onefile產生單個的可執行文件-D,-onedir產生一個目錄(包含多個文件)作為可執行程序-d,-debug產生debug

版本的可執行文件第

13

虛擬環境與程序打包發布29-a,-ascii不包含unicode

字符集支持-w,-windowed,-noconsol指定程序運行時不顯示命令行窗口(

僅對Windows

有效)-c,-nowindowed-console,指定使用命令行窗口運行程序(僅對

Windows

有效)-o

DIR,-out=DIR指定spec

文件的生成目錄。如果沒有指定,則默認使用當前目錄來生成spec

文件-p

DIR,-path=DIR設置Python導入模塊的路徑(與設

置PYTHONPATH

環境變量的作用相似)。也可使用路徑分隔符(Windows

使用分號,Linux

使用冒號)來分隔多個路徑-n NAME ,-name=NAME指定項目(產生的spec)名字。如果省略該選項,那么第一個腳本的主文件名將作為spec

的名字30表中列出的只是

PyInstaller

模塊所支持的常用選項,

如果需要了解PyInstaller

選項的詳細信息,則可通過pyinstaller

-h

來查看。13.3.2 PyInstaller

工具打包Python

文件為exe

文件PyInstaller

工具的命令語法如下。pyinstaller

選項參數 xxx.py無論項目源程序是單文件的應用,

還是多文件的應用,

只要在使用PyInstaller

命令時編譯作為程序入口的Python

源程序即可。下面先創建一個app

目錄,在該目錄下創建一個app.py

文件,文件中包含的代碼如程序段P13.7

所示。P13.7

app.pydef

main():第

13

虛擬環境與程序打包發布31print('程序開始執行')print(‘你好,歡迎來到

Python

課堂!’)if

name

==

'

main

':main()然后,使用命令行工具進入app

目錄,執行如下命令。pyinstaller-F

app.py執行上面的命令,將看到詳細的生成過程。當生成完成后,app

目錄下將會多一個

dist

目錄,并在該目錄下將會有一個

app.exe

文件,這就是使用PyInstaller

工具生成的exe

可執行程序。在命令行窗口中進入dist

目錄,在該目錄下執行app.exe,將會看到該程序生成如下輸出結果。程序開始執行32你好,歡迎來到

Python

課堂!該程序沒有圖形用戶界面,如果讀者試圖通過雙擊來運行該程序,則只能看到程序窗口一閃就消失了,這樣將無法看到該程序的輸出結果。上面的命令中使用了-F

選項,該選項指定生成單獨的exe

文件,因此,在dist

目錄下生成了一個單獨的大約為

6MB

app.exe

文件(在

Mac

OS

X平臺上生成的文件就叫app,沒有后綴);與-F

選項對應的是-D

選項(默認選項),該選項指定生成一個目錄(包含多個文件)作為程序。下面先將PyInstaller

工具

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論