---
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就可以直接寫程式執行

## 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://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
### 法二


直接用vscode裡面的創造
### 法三
用virtualenv
```python=
#安裝
pip install virtualenv
#進入
source virtualenv/bin/activate
#使用
virtualenv env01
```
```py=
#查看已經安裝的套件
pip list
```

```py=
#改python版本
virtualenv virtualenv -p "python 資料夾路徑"
```
離開虛擬環境
```python
deactivate
```
## python 打包方式
先cd到要打包之python檔的資料夾!
然後貼上以下字串

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: