--- tags: Coding --- # python ## 指令 ```python= #python 版本2 pip list #看所有package的版本 pip install packge的名子 -upgrade #升級package到最新版 pip install packge==版本 #指定packge的版本 #python 版本3 pip3 list #看所有package的版本 pip3 install packge的名子 -upgrade #升級package到最新版 pip3 install packge==版本 #指定packge的版本 #3.12之後的版本要安裝全局系統的套件 要在最後面加上--break-system-packages #xyz是要裝的套件名 #不然就是要用虛擬環境安裝 pip install xyz --break-system-packages #看目前python的位置 where python where python3 #看pyhon的版本 python --version #python2以上版本 python -V python3 --version #python3以上版本 python3 -V #輸出已經安裝的套件 pip freeze > requirements.txt #安裝別人的套件 pip install -r requirements.txt #看pip源自哪裡 pip -V #如果已經在虛擬機裡面 但pip install還是在全局的話 #就直接指定pip位置 然後install '/Users/wangguanjie/Desktop/recognizer/.venv/bin/pip' install 套件 ``` 在終端機打python3就可以直接寫程式執行 ![image](https://hackmd.io/_uploads/rJtvNncRC.png =80%x) ## homebrew ```python= #搜尋套件 brew search 套件名稱 #安裝套件 brew install 套件名稱 #更新全部的 Formulae brew update #更新所有已安裝的套件 brew upgrade #移除套件 brew uninstall 套件名稱 #查詢目前已安裝的套件 brew list #更新 Homebrew brew update #查看Homebrew版本 brew -v #Homebrew幫助資訊 brew -h #移除 Homebrew 在終端機貼上下列的指令: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" ``` 安裝python ```python= #終端機中輸入: brew install python #安裝Python 3以上版本,終端機中輸入: brew install python3 #驗證安裝是否成功 -> 查看python版本 python3 --version #python3以上版本 #下載特定版本python brew install python@3.11 #看哪些是由homebrew下載的python brew list | grep python #刪除指定版本python brew uninstall python@3.11 #清除檔案快取 brew cleanup #查看現在預設用什麼python which python3 python3 --version ``` 用brew的python建立虛擬環境 ```python= #看有哪些版本可以下載 brew search python #看python的位置 brew --prefix python@3.13 #各個pyhon都在這個資料夾 /opt/homebrew/opt/ #在目前資料夾建立名為.venv的虛擬環境 前面是要用的python版本 /opt/homebrew/Cellar/python@3.10/3.10.16/bin/python3.10 -m venv .venv #啟用虛擬環境 source .venv/bin/activate ``` pip install ```python= #在虛擬環境下查看pip路徑 which pip3 #虛擬環境下的pip去下載比較不會出錯 前面是路徑 /Users/wangguanzhe/Desktop/pythonCode/data_inner/.venv/bin/pip3 install pyserial #或是在虛擬環境要用 突破限制 python3 -m pip install pyserial --break-system-packages ``` ## conda 環境管理 ```python= conda --version #檢查有沒有安裝conda conda create -n BodyDetect python=3.11 #建立名為BodyDetect的環境 且python版本為3.11 conda activate BodyDetect #進入名為BodyDetect的環境 conda env list #列出已經安裝的環境 conda remove --name <環境名稱> --all #刪除指定環境 ``` ## pyenv ```python= #安裝 pyenv brew install pyenv #列出可安裝的 Python 版本 pyenv install --list #安裝指定版本 pyenv install 3.9.17 # 安裝 Python 3.9.17 pyenv install 3.11.6 # 安裝 Python 3.11.6 #設定全域(所有 shell 預設使用的版本) pyenv global 3.11.6 #設定區域(特定專案目錄使用的版本) cd my_project pyenv local 3.9.17 ``` ## 強行中止程式crtl + c ## function ```python= def my_function(): print("Hello from a function") ``` ## class 與繼承 ```python= # 交通工具(基底類別) class Transportation: # 建構式 def __init__(self): self.color = "white" #顏色屬性 # 駕駛方法 def drive(self): print(f'drive method is called.{self.color}') # 汽車子類別 class Car(Transportation): # 加速方法 def accelerate(self): print("accelerate is method called.") # 飛機子類別 class Airplane(Transportation): # 飛行方法 def fly(self): print("fly method is called.") if __name__ == __main__: mazda = Car() mazda.drive() print(mazda.color) ``` 當變數相同時 ```python== class Person: a=1 def __init__(self,a): self.a = a def p(self): print(f'{self.a}') print(a) p1 = Person(18) p1.p() #輸出1 18 ``` ![](https://i.imgur.com/uKKi3bb.png) https://www.learncodewithmike.com/2020/01/python-inheritance.html ## if \_\_name\_\_==\_\_main\_\_ a.py 中定義的函式 Fibonacci(n) 時,如果在同一個目錄下有一個檔案 b.py 我把這個函式 Fibonacci(n) 引用至裡面。 ```python= # a.py def Fibonacci(n): if n == 0: return 0 elif n == 1: return 1 else: return Fibonacci(n - 2) + Fibonacci(n - 1) if __name__=='__main__':#如果不加b.py在執行Fibonacci會執行a.py的18~19行 for i in range(3): print(Fibonacci(i)) ``` ```python= # b.py from a import Fibonacci x = Fibonacci(5) print(x) ``` 參考文章:https://ithelp.ithome.com.tw/m/articles/10277352 ## NameTuple 有點像是class,對每組資料給名子類別,主要作用是為了方便辨識與維護。 ```python= import collections # 两种方法来给 namedtuple 定义方法名 #User = collections.namedtuple('User', ['name', 'age', 'id']) User = collections.namedtuple('User', 'name age id') user = User('tester', '22', '464643123') print(user) >>>User(name='tester', age='22', id='464643123') # 定义一个namedtuple类型User,并包含name,sex和age属性。 User = namedtuple('User', ['name', 'sex', 'age']) # 创建一个User对象 user = User(name='Runoob', sex='male', age=12) # 获取所有字段名 print( user._fields ) # 也可以通过一个list来创建一个User对象,这里注意需要使用"_make"方法 user = User._make(['Runoob', 'male', 12]) print( user ) # User(name='user1', sex='male', age=12) # 获取用户的属性 print( user.name ) print( user.sex ) print( user.age ) # 修改对象属性,注意要使用"_replace"方法 user = user._replace(age=22) print( user ) # User(name='user1', sex='male', age=21) # 将User对象转换成字典,注意要使用"_asdict" print( user._asdict() ) # OrderedDict([('name', 'Runoob'), ('sex', 'male'), ('age', 22)]) >>> ('name', 'sex', 'age') User(name='Runoob', sex='male', age=12) Runoob male 12 User(name='Runoob', sex='male', age=22) OrderedDict([('name', 'Runoob'), ('sex', 'male'), ('age', 22)]) ``` ## enumearte 迭代器 就是一個對列表或是Tuple上的資料進行編號,會傳兩個值。或是有時候像NameTuple沒辦法直接用[編號]得到時就可以對每筆資料進行編號。 ```python= # enumerate function l1 = ["eat", "sleep", "repeat"] s1 = "geek" # creating enumerate objects obj1 = enumerate(l1) obj2 = enumerate(s1) print(l1[1]) print ("Return type:", type(obj1)) print (list(enumerate(l1))) # changing start index to 2 from 0 print (list(enumerate(s1, 2))) >>> Return type: <class 'enumerate'> [(0, 'eat'), (1, 'sleep'), (2, 'repeat')] [(2, 'g'), (3, 'e'), (4, 'e'), (5, 'k')] ``` ## try 語法 ``` try: 如果執行錯誤會執行except的程式 except: try失敗才會執行 else: try成功就執行 finally: 不管try或except有沒有成功都執行 ``` ## TypeError 跟 Exception ```md raise Exception("sonething wrong") raise TypeError("something wrong") ``` ## append ```md 在一個列表後再新增一個資料 ``` ## callback function ```md 用法是將函式傳入另一個函式 傳入的函示可以叫做arg ``` ```python= def test(arg): arg() # 呼叫 Callback Function def handle(): print(100) test(handle) # 將 handle 作為 Callback Function 傳進 test 函式裡面 ``` ## 虛擬環境 ### 法一 python3 -m venv tutorial-env //製作虛擬環境 在 Windows 系統中,使用://進入環境 tutorial-env\Scripts\activate.bat 在 Unix 或 MacOS 系統,使用://進入環境 source tutorial-env/bin/activate 接下來就可以開開心心的用pip下載函式庫與執行程式啦 https://docs.python.org/zh-tw/3/tutorial/venv.html ### 法二 ![截圖 2024-08-23 下午6.32.58](https://hackmd.io/_uploads/ryLEKyIoR.png) ![截圖 2024-08-23 下午6.49.37](https://hackmd.io/_uploads/BJALtJUj0.png) 直接用vscode裡面的創造 ### 法三 用virtualenv ```python= #安裝 pip install virtualenv #進入 source virtualenv/bin/activate #使用 virtualenv env01 ``` ```py= #查看已經安裝的套件 pip list ``` ![image](https://hackmd.io/_uploads/r1cO9icAC.png =60%x) ```py= #改python版本 virtualenv virtualenv -p "python 資料夾路徑" ``` 離開虛擬環境 ```python deactivate ``` ## python 打包方式 先cd到要打包之python檔的資料夾! 然後貼上以下字串 ![](https://i.imgur.com/3v6wIr3.png) pyinstaller 檔案名稱.py -F --add-data="C:\Users\ASUS\AppData\Local\Programs\Python\Python310\Lib\site-packages\mediapipe\modules;mediapipe/modules" -F 打包成只有exe檔 --add-data 補檔案用,因為有時候會缺失 注意:後面要是 ;mediapipe/modules 的形式 打包多個檔(參考文章) https://blog.csdn.net/m0_38056893/article/details/106843806: