本文參與「少數派讀書筆記征文活動」https://sspai.com/post/45653
前兩天回家了,今天繼續(果然還是學校學習動力比較足233333)
pyInstaller庫(第三方庫):
利用可執行檔案執行.py程式(打包)->不需要python解釋器及配置環境(第三方庫使用前需要額外安裝,利用pip工具)
補充:
參數 | -y,--nocomfirm | -n,Name,--name Name | --distpath DIR | --hidden-import ModuleName | -w,-windowed,--noconsole | --version-file File |
描述 | 不詢問 | 打包後檔案名 | 指定打包位置 | 打包隐藏的子產品 | 有GUI的程式可以不提供指令行界面 | 加入版本檔案 |
安裝步驟:
- 下載下傳pip(https://pypi.org/project/pip/#files)
-
(cmd指令行)進入pip解壓目錄,輸入指令:python setup.py install
補充:
1) pip更新子產品 pip install -U [PackageName]
2) pip解除安裝子產品 pip uninstall [PackageName]
3) 檢視pip已安裝的庫 pip list
- 我因為沒有安裝setuptools,是以還要先安裝setuptools再執行前1、2步(下載下傳setuptools:https://pypi.org/project/setuptools/#files;安裝:進入setuptools解壓目錄,輸入指令:python setup.py install )
-
配置pip環境變量(電腦->屬性->進階系統設定->環境變量->系統變量->Path->變量值末尾添加python的Scripts路徑[D:\Program Files (x86)\Python\Python36-32\Scripts])
注意:如果目前環境安裝的是python2,則Scripts檔案中會有pip和pip2;是python3的話,就是pip和pip3,雖然pip.exe和pip2/3的效果是一樣的,但是指令行執行時,隻能識别pip2/3。
-
(cmd指令行)pip install pyinstaller
注意:python2.7安裝pyinstaller可能會出錯,應該是SSL連接配接的問題,安裝更高版本的python就可以解決。
備注:如果使用的是pycharm IDE,有兩種安裝第三方資料庫的方法(推薦使用方法一)
1) 通過指令行安裝(需要注意的是pycharm的同步:File->Settings->Project->Project Interpreter->Add[選擇Python版本]->New environment[Location選擇一個空檔案;Base interpreter選擇對應python版本的python.exe;勾選Inherit global site-packages!!!!!!]->OK->項目右鍵Synchronize xxx重新整理library root)
2) 直接使用pycharm簡單粗暴:File->Default Settings->Project Interpreter->選擇python版本->點選右側“+”号添加庫->搜尋資料庫名稱->選中該庫後點選底部的Install Package(在安裝成功後會出現成功提示);點選“-”号可以解除安裝掉不需要的庫。
自定義第三方庫的下載下傳路徑:
1) 找到對應python版本的Lib路徑(D:\Program Files (x86)\Python\Python36-32\Lib)
2) 找到site.py并修改其中的USER_SITE和USER_BASE:
USER_SITE = "D:\Program Files (x86)\Python\Python36-32\Lib\site-packages"
USER_BASE = "D:\Program Files (x86)\Python\Python36-32\Scripts"
(site-package和Scripts都是已經存在的檔案,其中site-package就是自己安裝第三方庫的目錄)
-
打包程式,pyinstller -F [主檔案] -p [其他檔案1] -p [其他檔案2] --hidden-import[自模組化塊1] --hidden-import[自模組化塊2]
例:pyinstaller -F DrawDigitsV2.py -p DrawDigitsV1.py --hidden-import DrawDigitsV1
注意:我是win8系統,以我的情況,要打包的所有py檔案必須與pyinstaller.exe在同一路徑下(絕對路徑不可取),否則會出現找不到module的情況。其他圖檔,文本等依賴檔案與最終exe放于同一路徑下就行
-
運作:打開dist檔案夾,輕按兩下exe即可
備注:可通過直接修改生成.spec檔案相關參數,直接執行pyinstaller -F DrawDigitsV2.py指令生成新的可執行檔案
遞歸:
之前學習c和java的時候也學過遞歸,但是一直覺得不得要領,今天終于領悟到,遞歸是要抽象思考的,而我之前總是想着具象思考,恨不得把遞歸的過程每一步想清楚,心理才舒坦。。。(把現實情況抽象為數學公式或一個簡化過程,極端情況的思考)
例子1:階乘的實作
例子2:斐波拉契數列
例子4:字元倒轉
#StrReverse.py
def rvs(s):
if s=="":
return s
else:
return rvs(s[1:])+s[0]
str=input("請輸入字元串:")
print(rvs(str))
運作:請輸入字元串:Hello World
dlroW olleH
例子5:漢諾塔
#HanNuoTa.py
count=0;
def hanoi(n,src,dst,mid): #參數1:圓盤數量;參數2:源柱子;參數3:目标柱子;參數4:中間柱子
global count
if n==1:
print("{}:{}->{}".format(1,src,dst)) #将原始柱的盤子移動到目标柱子
count+=1
else:
hanoi(n-1,src,mid,dst) #将原始柱的n-1個盤子借助目标柱子移動到中間柱子
print("{}:{}->{}".format(n,src,dst))
count+=1
hanoi(n-1,mid,dst,src) #再将n-1個盤子借助原始柱子從中間柱子移動到目标柱子
S1,S2,S3="A","B","C"
hanoi(3,S1,S2,S3)
運作:1:A->B
2:A->C
1:B->C
3:A->B
1:C->A
2:C->B
1:A->B
例子6:科赫雪花
描述:原來的一條直線變成了4條短的直線,每一條短的直線又可執行相同的操作
#KochDrawV1.py
#科赫曲線小包裹
import turtle
def koch(size,n): #size->源曲線長度,n->階數
if n==0:
turtle.fd(size) #直接繪制一條直線
else:
for angle in [0,60,-120,60]: #left為“海龜”方向(相對)
turtle.left(angle)
koch(size/3,n-1)
def main():
turtle.setup(600,600)
turtle.penup()
turtle.goto(-200,100)
turtle.pendown()
turtle.pensize(2)
# 科赫曲線的繪制
# koch(400,3) #3階科赫曲線
#科赫雪花的繪制
level=3 #三階科赫雪花
turtle.color("red")
koch(400,level)
turtle.right(120)
turtle.color("green")
koch(400,level)
turtle.right(120)
turtle.color("blue")
koch(400,level)
turtle.hideturtle()
turtle.done()
main()
最終運作: