Python Package 封包的設計與使用 By 彭彭

  Рет қаралды 140,192

彭彭的課程

彭彭的課程

Күн бұрын

Пікірлер: 355
@jennychen797
@jennychen797 4 жыл бұрын
超級感謝老師的講解,一直在網路上找關於python架構,突然發現這裡竟然有如此完整的教學影片,真的受益良多
@cwpeng-course
@cwpeng-course 4 жыл бұрын
很高興對你有幫助 :))) 也謝謝你的回饋 ~~~~
@kalongchen0607
@kalongchen0607 Жыл бұрын
非常感謝彭彭老師,受益匪淺。PS.聼老師的課是可以開1.5倍速度的,這樣不會睡着。
@cwpeng-course
@cwpeng-course Жыл бұрын
哈哈哈,我的朋友說應該要兩倍速 XDDD
@張家齊-m4f
@張家齊-m4f 5 жыл бұрын
很喜歡這系列課程,謝謝你
@cwpeng-course
@cwpeng-course 5 жыл бұрын
不客氣,謝謝你的回饋 :)
@蕭皓文-w3r
@蕭皓文-w3r 4 жыл бұрын
我發現如果你沒有打__init__.py 但你還是import他的話 系統會自動幫你建立一個__pycatch__.py的檔案 不知道是不是新版的新功能,我是載3.8.3 64bit的 但,我不確定這樣算不算是一個封包?
@cwpeng-course
@cwpeng-course 4 жыл бұрын
算哦,最新版的 Python 可以接受不特別加 __init__.py 這個檔案 ~
@tonylin6180
@tonylin6180 4 жыл бұрын
我也正想詢問這個問題,我是使用3.7.8,試完老師所教的以後好奇如果沒有使用__init__.py檔案會如何,結果沒差別,不太確定是不是新版以後就不用放 __init__.py檔案就可以傳送封包
@小韩-t5z
@小韩-t5z 3 жыл бұрын
@@tonylin6180 难怪
@AK-di6xs
@AK-di6xs 3 жыл бұрын
感謝老師的教學~ 一如往常的收穫良多~ 這次聲音還是很小聲聽不太到>< # 封包(package)的使用 # 封包:包含模組的資料夾 用來整理、分類模組程式 # 建立封包 # 專案檔案配置 #-專案資料夾 #-主程式.py #封包資料夾 #-__init__.py (有建立這個程式,這個資料夾就會被當成封包來看待 兩個底線init兩個底線.py) #-模組一.py #-模組二.py # 專案檔案配置範例 #-專案資料夾 #-main.py #-geometry #-__init__.py #-point.py #-line.py # 基本語法 #import 封包名稱.模組名稱 #import 封包名稱.模組名稱 as 模組別名 # 主程式 import geometry.point result=geometry.point.distance(3,4) print(result) import geometry.point as x0 result=x0.distance(3,4) print("距離: ",result) import geometry.line result=geometry.line.slope(1,1,3,3) print("斜率: ",result) import geometry.line as line result=line.slope(1,1,3,3) print("斜率: ",result)
@cwpeng-course
@cwpeng-course 3 жыл бұрын
好哦,感謝你的回饋 :)
@yu-tinglin9006
@yu-tinglin9006 4 жыл бұрын
很喜歡老師的講解,概念原理都講得很清楚,感覺封包的概念與另一個模組 virtualenv 很類似,但又有點不一樣,請問老師可以另外拍一集影片講解 virtualenv 的用法嗎?謝謝!
@cwpeng-course
@cwpeng-course 3 жыл бұрын
原始的概念是一台電腦就是一個 Python 環境。但後來有一種需求是希望每個專案都有自己獨立的環境,所以延伸出在一台電腦中建立 Python 虛擬環境 virtualenv,就可以建立多個,在這個虛擬環境中有自己的套件安裝、系統設定等等。
@ednaho5536
@ednaho5536 6 жыл бұрын
謝謝彭彭老師的課, 明白了如何建立整個結構! m(_ _)m
@cwpeng-course
@cwpeng-course 6 жыл бұрын
讚哦!
@sleepforest43
@sleepforest43 3 жыл бұрын
感謝彭彭老師,非常細膩完整的教學!!!!!
@cwpeng-course
@cwpeng-course 3 жыл бұрын
不客氣,加油 :)
@Nicholas-sb1fp
@Nicholas-sb1fp Жыл бұрын
老師 謝謝 努力學習中
@cwpeng-course
@cwpeng-course 5 ай бұрын
加油 :)
@肥狗二號
@肥狗二號 6 жыл бұрын
重新復習更清楚架構了
@cwpeng-course
@cwpeng-course 6 жыл бұрын
嗯嗯嗯 :)
@Ts2pc
@Ts2pc 2 жыл бұрын
100分, 簡明扼要
@cwpeng-course
@cwpeng-course 2 жыл бұрын
感謝 ~
@LinTzuJay
@LinTzuJay 4 ай бұрын
老師您好,所以封包的方式是否可以解決每加一個分類資料匣就要用sys.path.appends去改變搜尋路徑的問題?另封包中的封包,是否也要__init__.py?(雖然看其他留言有提到不強迫要有了) 很佩服老師,幾百則留言真的五花八門
@Cousinmoview
@Cousinmoview 5 жыл бұрын
不太明白封包的意義。其實將需要的模組放在同一資料夾中,然後新增該搜尋路徑是不是一樣效果?
@cwpeng-course
@cwpeng-course 5 жыл бұрын
你的解法也不錯,只是程式中就只剩模組的名字,還可能和別的模組名字衝突。 若有封包,還會加上:封包的名字.模組的名字。就可能出現 pk1.my_module 和 pk2.my_module 這樣的配置。 工具就只是工具,要不要使用,就看每個開發團隊的喜好了。
@gordon8643
@gordon8643 4 жыл бұрын
我看完影片也有同樣疑問,感謝施主有問過這個問題XD
@姚字丞
@姚字丞 2 жыл бұрын
謝謝作者的製作。
@cwpeng-course
@cwpeng-course 2 жыл бұрын
:)
@張智雄-g8v
@張智雄-g8v 4 ай бұрын
老師您好,謝謝您的Package封包教學,我想請問關於一些進階用法,在於main.py 如果我需要打包成exe執行檔,在於main.py打包成exe執行檔中是否也需要將使用packages使用的module 在main.py 一併引入 如import pandas 等進行封裝呢?
@user-manson037
@user-manson037 Жыл бұрын
這跟加入捷徑,sys.path.appends比起來有甚麼差異嗎? 我能想到的是加入路徑的話當執行程式時,系統就會到所有的路徑下去找檔案,同時也得注意檔名不能重複,以及路徑的優先順序的問題。 所以是不是使用模組的方式的話,這樣就不用再加入路徑,能讓系統效能比較好? 另外模組必須放在路徑之下對吧?
@cwpeng-course
@cwpeng-course 5 ай бұрын
加入路徑,讓系統可以從既有的路徑中去搜尋模組,但模組可能也會想用封包進一步去分門別類,估計就是這樣。
@蝦子
@蝦子 2 жыл бұрын
乾蝦彭彭老師無私講解🥰
@cwpeng-course
@cwpeng-course 2 жыл бұрын
感謝回饋,希望有幫助就好 :)
@chuanko1194
@chuanko1194 2 жыл бұрын
很棒的教學!受益良多,想請問當geometry資料夾底下有多個模組,要如何一次導入全部
@cwpeng-course
@cwpeng-course Жыл бұрын
這個得去調整 __init__.py 中的內容才行,調整後你就可以使用 from geometry import * 來做這件事情,你可以參考: stackoverflow.com/questions/1057431/how-to-load-all-modules-in-a-folder
@chuanko1194
@chuanko1194 Жыл бұрын
@@cwpeng-course 感謝回復!問題已解決
@user-dq7hw7ce9v
@user-dq7hw7ce9v 4 жыл бұрын
把程式放進backup後 要改寫成python backup\檔案名.py才能叫出 那為什麼原本放在python training資料夾中的檔案就不需要額外加註資料夾路徑呢?
@cwpeng-course
@cwpeng-course 3 жыл бұрын
我們有一個開啟專案資料夾的動作,這個動作會讓 VS Code 的環境以這個專案資料夾為基準去尋找要執行的檔案在哪裡,所以如果檔案放在專案資料夾的根目錄,就不用另外加資料夾的名稱。
@BANG-ZHOUHONG
@BANG-ZHOUHONG 4 жыл бұрын
彭彭老師,想請教您影印4:29 左邊的back up folder 裡面的資料,原本是在python-training 路徑裡面的文件,後來您這堂課把資料移到back up後,我要跑裡面的程式,PS D:\python-training> python set-dictionary.py C:\Users\user\AppData\Local\Programs\Python\Python39\python.exe: can't open file 'D:\python-training\set-dictionary.py': [Errno 2] No such file or directory 跳出以上這個文字; 用了您這堂課教的import sys 也無法叫出來,除了把文件移出backup folder還有什麼方式可以執行程式嗎?
@cwpeng-course
@cwpeng-course 4 жыл бұрын
這個和工作目錄的概念有關係,你可以透過 cd 這個指令切換工作目錄到 backup 資料夾再執行程式。但這個概念比較複雜,要額外學習,所以我在教學中不會特別提到 ~
@LeoChou8668
@LeoChou8668 2 жыл бұрын
老師好,想問一下 上支影片有教到用sys模組新增路徑列表的搜尋路徑 如果直接import geometry.point 是不是就不需要用到sys模組去新增geometry資料夾的搜尋路徑呢
@cwpeng-course
@cwpeng-course 2 жыл бұрын
對哦,那就會以執行的資料夾為基礎,去看待模組所在的相對位置。
@吳-b6r
@吳-b6r 4 ай бұрын
@@cwpeng-course 老師您好 同上 想詢問模組相對應位置 上支影片提到 要新增sys的搜尋路徑尋找模組 那因為我們新增一個資料夾放置模組 是因為有多增加__init__.pay這個程式才不用新增路徑 還是是因為 有import “geometry.line”這個動作才告知封包在哪讓程式不用在路徑列表中尋找?
@darkon6926
@darkon6926 Жыл бұрын
老師你好,想請問 1. 不是封包,就例如你的backup資料夾,放在一起有什麼用? 2. __init__ 的PY是不是不用管,一直存在,什麼都不用寫coding就可以? 3.與同事分工,假如有30個py, 就要import 30次?
@cwpeng-course
@cwpeng-course Жыл бұрын
1. 我的 backup 只是拿來整理檔案而已,沒有其他用處。 2. 新的版本,確實可以不用管。 3. 對,但可以檢討程式包裝的顆粒度,不一定要分得那麼細。
@aaron1262
@aaron1262 3 жыл бұрын
點到優秀課程頻道的第777的讚^_^
@cwpeng-course
@cwpeng-course 3 жыл бұрын
哈哈哈,祝你新年一切順利 XDDDD
@山田林-f5b
@山田林-f5b 9 ай бұрын
謝謝彭彭老師
@cwpeng-course
@cwpeng-course 5 ай бұрын
不客氣呦 ~
@yuzhang6400
@yuzhang6400 2 жыл бұрын
彭彭老師,就是我想問一下,這個視頻里,把所有以前的文件放到了backup裏面,但是當我運行上一個視頻里的那個module時候,又顯示路徑不存在,然後我就加了個backup的路徑,還是錯誤,遇到這種情況,應該怎麼辦呢
@cwpeng-course
@cwpeng-course 2 жыл бұрын
執行時的命令是對應到檔案的路徑,所以如果在同一個資料夾下可以直接打檔名:python 檔案名稱,如果有子資料夾,就要加上資料夾名稱,例如:python 資料夾名稱/檔案名稱,這樣去執行。
@我想學英文
@我想學英文 3 жыл бұрын
把過去程式裝入 back-up資料夾 (back up 是自己取的,可以隨意取 例如:abc or DDD)
@cwpeng-course
@cwpeng-course 3 жыл бұрын
感謝補充說明 :)
@asherliao8216
@asherliao8216 10 ай бұрын
老師好!想請問執行main.py出現以下的問題 Traceback (most recent call last): File "D:\python-training\main.py", line 1, in import geometry.point ModuleNotFoundError: No module named 'geometry' PS D:\python-training>
@吳丞岳
@吳丞岳 2 жыл бұрын
彭彭老師您好,想請教一個問題! 我把先前上課產生的py檔案也像您一樣,放入新增的backup資料夾中,但想點開復習時,發現執行的時候會出現如下的錯誤,C:\Users\user\AppData\Local\Programs\Python\Python38\python.exe: can't open file 'loop.py': [Errno 2] No such file or directory,看字面上的意思,似乎只搜尋了C槽的路徑,所以找不到放在D:\\Python training\\backup的檔案。當我把這些py檔案移出backup資料夾至原先的python training下,則又可以正確運行。難道在主程式跟在資料夾內執行所搜尋的路徑是有差別的嗎??
@cwpeng-course
@cwpeng-course 2 жыл бұрын
程式放在哪個資料夾確實是有差別的,所以在使用 VS Code 的時候,必須先打開我們要工作的資料夾。
@90weker29
@90weker29 3 жыл бұрын
受益良多,謝謝彭彭老師
@cwpeng-course
@cwpeng-course 3 жыл бұрын
不會,有幫助就好 :)
@kunwang5951
@kunwang5951 3 жыл бұрын
说得真好,很容易懂,就是这一集声音有点小,我把音响都开到最大了
@cwpeng-course
@cwpeng-course 3 жыл бұрын
感谢你的回馈和建议哦,会多注意声音 :)
@張小照
@張小照 4 ай бұрын
感謝老師
@xiiiiiixi
@xiiiiiixi 2 жыл бұрын
thanks
@cwpeng-course
@cwpeng-course 2 жыл бұрын
:)
@坤億陳
@坤億陳 3 жыл бұрын
教得很好 謝謝老師。
@cwpeng-course
@cwpeng-course 3 жыл бұрын
也謝謝你的回饋呦 :)
@jimmypc03
@jimmypc03 3 жыл бұрын
請問彭彭老師,使用封包為什麼不需要像上一集還須設定路徑 sys.path.append("geometry"),就可以執行了呢?
@cwpeng-course
@cwpeng-course 3 жыл бұрын
封包名稱就是對應到資料夾,我們的資料夾位置確實就放在專案資料夾的根目錄,所以不用再特別加路徑到 sys.path 中
@jimmypc03
@jimmypc03 3 жыл бұрын
@@cwpeng-course 謝謝老師
@高子竣-d4p
@高子竣-d4p 11 ай бұрын
老師好,能請問我無法順利執行,跳出 PS C:\Users\USER\Desktop\python\backup> python main.py C:\Users\USER\AppData\Local\Programs\Python\Python312\python.exe: can't open file 'C:\\Users\\USER\\Desktop\\python\\backup\\main.py': [Errno 2] No such file or directory
@edwardyeh6110
@edwardyeh6110 2 жыл бұрын
請問老師有log的解說嗎?如果沒有,可以解說一下嗎?謝謝🙏🏻
@cwpeng-course
@cwpeng-course 2 жыл бұрын
目前沒有,謝謝你的建議我會考慮看看的 :)
@junqian9024
@junqian9024 5 жыл бұрын
彭彭老師的課 深入潜出 謝謝彭彭老師
@cwpeng-course
@cwpeng-course 5 жыл бұрын
不客氣呦 :)
@nn4698ss
@nn4698ss 5 жыл бұрын
老師好:所以在上個影片中的 modules 資料夾,若有加上 __init__.py 的檔案 就不需要特地 sys.path.append 了對嗎~
@cwpeng-course
@cwpeng-course 5 жыл бұрын
是的,但那個資料夾會變成封包的概念。
@djyd4583
@djyd4583 6 жыл бұрын
很好的教程
@cwpeng-course
@cwpeng-course 6 жыл бұрын
謝謝 :)
@wen-tungwen9446
@wen-tungwen9446 4 жыл бұрын
老師您好,我將dic.py放進backup裡面(此時還沒有建立__init__.py),無法運作dic,將它拉出來可以運作,請問是缺少什麼指令嗎? 還有非常謝謝您的教學,很清楚~
@cwpeng-course
@cwpeng-course 4 жыл бұрын
可能只是檔案路徑問題,程式檔案放進不同資料夾中,執行的時候就必須加入資料夾的名稱 例如:python backup/dic.py
@wen-tungwen9446
@wen-tungwen9446 4 жыл бұрын
@@cwpeng-course 原來如此,感謝!
@郭庭亦-q5p
@郭庭亦-q5p 4 жыл бұрын
彭彭老師,我把之前打的程式們像你一樣丟進backup資料夾後就無法執行了ㄟ,所以最後我只好又把它們拿回python放 為甚麼會這樣阿,我有想過會不會是sys.path沒有找backup資料夾的緣故,所以import了sys,也append了backup,但它還是無法執行程式,,,,,,
@cwpeng-course
@cwpeng-course 4 жыл бұрын
感謝 @Ian Jiang_ 的回應,確實要注意程式檔案所在的資料夾,以及終端機的工作路徑,這部份比較像是命令介面的操作和觀念,我沒有在影片中多說,但 @Ian Jiang_ 的回應很棒可以參考看看 :)
@Alex-oz7uz
@Alex-oz7uz 11 ай бұрын
我发现现在如果用from import 导入模组,就能直接使用模组名不用在前面加上档案名了耶,但是用import 档案名.module的话就得加档案名
@yingdazo
@yingdazo Жыл бұрын
好像現在取了別名之後還是可以用完整的封包+模組名稱來呼叫耶 兩種都印得出來 import geometry.line as line result=geometry.line.slope(1,1,3,3) print("斜率:", result) result=line.slope(1,1,3,3) print("斜率:", result)
@cwpeng-course
@cwpeng-course Жыл бұрын
是的,感謝你的分享 :)
@hsiehhao-yun3056
@hsiehhao-yun3056 4 жыл бұрын
我解決了,應該是geometry跟module這兩個程式搞混了路徑 我新開專案 就可以了,所以把之前的課程放到BACKUP裡面也是可以的,只是我試過 在BACKUP裡面的程式執行時會錯誤,要把移出來回原本python資料夾底下 才能執行,這樣對不對?
@cwpeng-course
@cwpeng-course 4 жыл бұрын
是哦,恭喜你解決問題!自己解決應該是很棒的體驗 :)
@kill13790
@kill13790 4 жыл бұрын
@@Justinian_Life sys.path.append("modules")->sys.path.append("backup/modules")就可以找到囉
@陳昱銓-z9x
@陳昱銓-z9x 3 жыл бұрын
很謝謝彭彭老師的講解,只是不知道是不是我耳機問題 聲音有點小
@cwpeng-course
@cwpeng-course 3 жыл бұрын
好哦,感謝你的回饋 :)
@shyana0206
@shyana0206 3 жыл бұрын
老師有機會開C++的課程嗎
@cwpeng-course
@cwpeng-course 3 жыл бұрын
有機會哦,不過讓我認真考慮看看,時間有點少呀 @@
@huangg09
@huangg09 3 жыл бұрын
想請問在建立封包資料夾時我使用geo這個名稱,內部也有建立__init.py和point.py,卻在import geo.point時跳出"execution_count" : null NamaError:name 'null' is not defined 使用的編輯器是Jupyter notebook,想了解是發生什麼問題呢
@cwpeng-course
@cwpeng-course 3 жыл бұрын
你程式中使用了 null,而 null 這個名字在你的程式中沒有被定義 ~ 表面上是這個意思,但實際上得看看你的程式碼才知道發生了甚麼事情 ~
@carinachen3362
@carinachen3362 4 жыл бұрын
def distance(x,y): return ((x**2+y**2))**0.5 def len (x1,y1,x2,y2): return((x2-x1)**2+(y2-y1)**2)**0.5 def slope (x1,y1,x2,y2): return (y2-y1)/(x2-x1) #主程式 import geometry.point result=geometry.point.distance(3,4) print("距離",result) import geometry.line as line result=line.slope(1,1,3,3) print("斜率",result)
@cwpeng-course
@cwpeng-course 4 жыл бұрын
:)
@海洋山小
@海洋山小 6 жыл бұрын
老師想請教下 import as 和 from import 的用法差異是在哪?看起來好像功能都一樣可以縮短名稱。謝謝......
@cwpeng-course
@cwpeng-course 6 жыл бұрын
import 模組名稱 as 模組別名 from 模組名稱 import 模組中的函式或變數名稱 大概是這樣,使用 from 可以直接將模組中的函式或變數名稱載入。 只用 import 會把整個模組一起載入。 基本上都可以使用,看情況方便就好 ~
@海洋山小
@海洋山小 6 жыл бұрын
了解,謝謝老師
@蘇孟文
@蘇孟文 Жыл бұрын
老師你好,我將舊資料放在back up,我開啟上次課程的module資料時卻無法使用「module資料夾內的模組」,我該如何讓Back up 裡面資料加入 modules資料夾內的模組使用? 還是 主程式.py 要在 專案資料夾「python」內才能使用封包資料夾內的資料? - Python - back up - module <該程式內的可以載入geometry模組嗎? - modules - __init__.py - geometry(內包含上期所學distance,slope) 以下是錯誤代碼,我詳看留言爬文實在不是很了解。 Traceback (most recent call last): File "S:\PYTHON_LEARN\backup\module.py", line 8, in import modules.geometry as geometry ModuleNotFoundError: No module named 'modules' 謝謝老師提供優良教學,再麻煩老師幫忙解答謝謝您。
@cwpeng-course
@cwpeng-course Жыл бұрын
要看一下你實際執行的命令是什麼,主要的工作路徑必須保持在 python 的資料夾這邊,不能切換到 backup 裡面。
@williamschen4178
@williamschen4178 3 жыл бұрын
老師好 我跟老師一起寫程式,碰到下面的問題 AttributeError: module 'geometry.point' has no attribute 'slope' 請問要如何處理
@cwpeng-course
@cwpeng-course 3 жыл бұрын
可能需要你的完整程式碼才有辦法判斷哦 ~
@kwss2222
@kwss2222 5 жыл бұрын
老師我想要問一下,就是當之前舊資料都移到backup之後 我如果執行之前的module.py 就是在terminal 打python module.py會出來python: can't open file 'backups.module.py': [Errno 2] No such file or directory 請問還要加打或是漏哪些東西呢?
@cwpeng-course
@cwpeng-course 5 жыл бұрын
封包和模組,和你的專案資料夾、命令列工作路徑的配置是有相關性的。所以其實不太能隨意地移動。 你的錯誤,代表 python 根據目前的配置,找不到程式檔案。這得要查看程式碼的細節、資料夾的配置和工作路徑的狀況,比較有辦法找到實際的問題是什麼。
@aegeana7163
@aegeana7163 4 жыл бұрын
老師我想請問一下在上支影片中,我沒有使用sys.path.append這個步驟,而是直接寫modules.geometry,運算也會照樣執行,那這樣是使用封包的意思嗎?
@cwpeng-course
@cwpeng-course 4 жыл бұрын
是哦,剛好我們放在 modules 的資料夾,你要把他當成是封包的概念也可以 ~
@Jin6903
@Jin6903 4 жыл бұрын
我想請問一下 我把過去的資料都丟進backup 但是資料都無法執行 請問除了把他們再丟回原本的python的方法以外 還有讓他們在bcakup也能夠執行的方法嗎? 感謝各位高手
@cwpeng-course
@cwpeng-course 4 жыл бұрын
這背後牽扯到一些系統運作的觀念,所以不是單一動作可以解決的。 建議試著去了解命令介面,終端機「工作路徑」的概念。然後學習使用 cd 這個命令切換工作路徑,把工作路徑切換到 backup 可能就有機會成功嘍 ~
@Jin6903
@Jin6903 4 жыл бұрын
@@cwpeng-course 好的 謝謝 講解的真的很詳細 :)
@nickyang20
@nickyang20 3 жыл бұрын
可以試試 python backup\"之前的程式".py
@neilhsu2524
@neilhsu2524 3 жыл бұрын
老師您好,我想請問一下為什麼開啟backup資料夾裡面的專案, 執行之後會出現[Errno 2] No such file or directory的錯誤題示? 還有這種錯誤該如何解決? 謝謝老師。
@cwpeng-course
@cwpeng-course 3 жыл бұрын
檔案移動到子資料夾,路徑會改變,所以你的執行命令會找不到檔案是正常的,移出來就可以了,或者在你的檔案名稱前面加上資料夾名稱
@neilhsu2524
@neilhsu2524 3 жыл бұрын
了解,謝謝老師
@andychen961
@andychen961 4 жыл бұрын
把main.py改到backup資料夾,即使終端路徑正確也無法執行 為甚麼呢? 會出現 Traceback (most recent call last): File "main.py", line 2, in import modules.geometry ModuleNotFoundError: No module named 'modules'
@cwpeng-course
@cwpeng-course 4 жыл бұрын
因為錯誤訊息是說找不到模組,所以要確認模組的程式是否也有一併的調整路徑 ~
@CornuDev
@CornuDev Жыл бұрын
感謝🙏
@cwpeng-course
@cwpeng-course Жыл бұрын
加油!
@mhfang930
@mhfang930 4 жыл бұрын
老師您好!之前從這部影片和您一樣新增資料夾將先前檔案丟進去,但後來裡面的檔案都無法讀取,我知道可能是路徑的問題,想情問老師該如何解決此問題?
@cwpeng-course
@cwpeng-course 4 жыл бұрын
任何有檔案路徑概念的地方,都要一併考慮資料夾,有多一層資料夾就要寫:資料夾名稱/檔案名稱 原則上是這樣,實際上還要看你的資料夾配置,還有執行程式的位置來判斷可能的問題。
@masonhong2056
@masonhong2056 4 жыл бұрын
想請教一下老師 can't open file 'main.py': [Errno 2] No such file or directory 這是什麽意思?有解決辦法嗎?(試過sys.path.append,但還是不行)
@masonhong2056
@masonhong2056 4 жыл бұрын
Traceback (most recent call last): File "main.py", line 3, in result=geometry.point.distance(3,4) AttributeError: module 'geometry' has no attribute 'point' 我稍微改一下存放位置 然後問題就變成上面這個了。。。
@cwpeng-course
@cwpeng-course 4 жыл бұрын
後面的問題是指 geometry 這個模組中,沒有定義 point,可能要看看 geometry.py 中的程式怎麼寫的嘍 ~
@薛阿貴-h6b
@薛阿貴-h6b 2 жыл бұрын
老師好,請問執行程式後,封包資料夾會跑出一個__pycache__的資料夾,請問那是什麼? 有何功用?
@cwpeng-course
@cwpeng-course 2 жыл бұрын
Python 幫你產生的快取資料,可以加快程式運作 ~
@jerrychang2944
@jerrychang2944 2 жыл бұрын
請問老師,我將之前課程的py檔案放到backup資料夾後,就無法執行了 系統顯示:can't open file 'E:\\python-training\\start.py': [Errno 2] No such file or directory 我現在檔案位在E:\\python-training\\backup 請問這需要怎麼修正??
@cwpeng-course
@cwpeng-course 2 жыл бұрын
執行的時候要把資料夾路徑也打進去,例如 python backup/start.py
@jerrychang2944
@jerrychang2944 2 жыл бұрын
@@cwpeng-course 解決了,謝謝老師!
@wkx8031
@wkx8031 6 жыл бұрын
請問老師 我發現放到backup 資料夾的 .py 無法執行,我覺得因為backup資料夾不在搜尋路徑裡(影片11載入模組有提過),所以我在backup資料夾裡的檔案第一行就打 sys.path.append("backup"),執行時卻跑出[Errno 2] No such file or directory,, 請問要怎麼解決?
@cwpeng-course
@cwpeng-course 6 жыл бұрын
看起來是指執行的時候找不到程式檔案,和模組可能沒有太大的關連。 不知道你實際執行的時候,打的命令是什麼?
@wkx8031
@wkx8031 6 жыл бұрын
謝謝回復 :) 執行命令指示是很一般的 python function-args.py(檔名),檔名也無誤
@wkx8031
@wkx8031 6 жыл бұрын
我把螢幕截圖來解釋問題,可以讓老師比較清楚,麻煩看一下, 謝謝 imgur.com/Njv5Sbz
@cwpeng-course
@cwpeng-course 6 жыл бұрын
路徑的問題嘍,命令列的工作路徑是 d:\python training\。但是檔案在 d:\python training\backup\,我們之前是把程式檔案放在跟工作路徑一樣的位置,可以直接打檔名。 先不論程式有沒有寫對,如果要執行程式檔案,必須要打正確的路徑,包含資料夾: python backup\function-args.py 這樣才會真的執行到程式哦 ~
@wkx8031
@wkx8031 6 жыл бұрын
彭彭的課程 問題解決,謝謝!,期待你下個影片!
@邱永家
@邱永家 3 жыл бұрын
老師,我問一下,為什麼我把主程式放在一個資料夾內(像是你影片裡的backup),在封包時就沒辦法照著那路徑跑(就import無法用到geometry),但我單獨把主程式拉出來,就可以成功了。是跟每個資料夾是獨立的性質有關係嗎?
@cwpeng-course
@cwpeng-course 3 жыл бұрын
封包和資料夾的結構是有緊密關係的,所以隨便換資料夾在專案中基本上是不行。我只是把過去的教學放到 backup,真的要拿出來用我也會在確認資料夾結構和封包之間的關係 ~
@林佳緣-y2w
@林佳緣-y2w 3 жыл бұрын
@@cwpeng-course 老師好,如果把main.py放到backup資料夾,那main.py裡面import後面的寫法要改嗎?
@leegrace4401
@leegrace4401 4 жыл бұрын
最近的課程收音都很小,不知道老師可以協助解決嗎~家裡的喇叭沒問題,且開到100%嘞
@cwpeng-course
@cwpeng-course 4 жыл бұрын
好的,我會注意之後的影片聲量,謝謝你的提醒 ~~~~~
@yarina1541
@yarina1541 3 жыл бұрын
請問為什麼我主程式第一行的geometry.point一直顯示有錯誤? 他顯示Import “geometry.point” could not be resolved
@cwpeng-course
@cwpeng-course 3 жыл бұрын
如果程式可以執行就沒問題,你顯示的錯誤可能是一個叫做 pylint 的擴充套件產生的,他會幫你偵測錯誤但不一定很精準。
@tx1969
@tx1969 3 жыл бұрын
请问老师,如果我的两个 .py文件在不同的文件夹下,我试了添加module的路径,但是会报错,程序运行不了,这个该如何解决呢
@cwpeng-course
@cwpeng-course 3 жыл бұрын
这得看实际的错误讯息,路径设定,档案实际配置等细节才有办法进一步判断了 @@a
@kyu6766
@kyu6766 2 жыл бұрын
請問老師,我直接在函式檔案line.py裡想測試執行函式,打slope(1,1,3,3),可是卻跳出錯誤說無法打開檔案,找不到檔案。請問為何之前教函式時我可以在module.py裡執行,但現在教封包,卻只能回到主程式執行呢? 是需要新增搜尋路徑的關係嗎?但是我看留言的意思好像是用封包就能不用額外新增路徑,而且我也試了加sys.path.append(geometry),還是不行,麻煩老師解惑,謝謝!
@cwpeng-course
@cwpeng-course 2 жыл бұрын
執行程式的時候要加上資料夾路徑,例如 python 子資料夾名稱/程式檔案名稱
@jacksonli4826
@jacksonli4826 3 жыл бұрын
老师我請問 :c:\Users\jackson li\AppData\Local\Programs\Python39\python.exe: can't open file'c:\Users jackson li\Desktop\datetype.py':[Erro 2]No such file or directory 該怎麼解決?
@cwpeng-course
@cwpeng-course 3 жыл бұрын
錯誤訊息的意思是找不到你想執行的檔案,請確定按照這系列一開始的教學,先開專案資料夾,並且在 VS Code 中先打開專案資料夾,再執行程式。
@terry9026955
@terry9026955 5 жыл бұрын
import有寫出 (封包資料夾) . (.py檔) . (function)的話就不用擔心sys.path()找不到路徑了這樣嗎? 假如把 import geometry.point 改成 import point的話,是不是要在呼叫前先 import sys sys.path.append("geometry")呢?
@cwpeng-course
@cwpeng-course 5 жыл бұрын
可以哦,不過那就沒有封包的概念,只是去 geometry 的資料夾中尋找模組檔案而已。
@terry9026955
@terry9026955 5 жыл бұрын
@@cwpeng-course 原來如此! 我了解了謝謝老師
@yingwang2251
@yingwang2251 5 жыл бұрын
老师我想问一下为什么我的不显示,没有出错啊 Traceback (most recent call last): File "main.py", line 2, in import geometry.point ModuleNotFoundError: No module named 'geometry' macdeMacBook-Air:P mac$
@cwpeng-course
@cwpeng-course 5 жыл бұрын
程式找不到 geometry 模组档案,可能要确认看看你的档案名称哦 ~
@yingwang2251
@yingwang2251 5 жыл бұрын
@@cwpeng-course 谢谢老师!!!
@wavelorentz
@wavelorentz 3 жыл бұрын
請問老師, 有沒有加__init__.py的檔案對程式執行有甚麼差別, 發現就算沒加__init__.py, 程式還是正常執行, 謝謝
@cwpeng-course
@cwpeng-course 3 жыл бұрын
早期的版本一定要加 __init__.py 才能夠變成一個封包資料夾,後來的版本如你所說的,可以不用加 ~
@Andrew-rw4op
@Andrew-rw4op 3 жыл бұрын
老師好 我想請教一下~ 為什麼我在python-training下新增backup資料夾 將以前的檔案丟進去之後,以前的檔案都沒辦法正常執行了QQ 而且為什麼上次做完模組後 多了一個__pycache__的檔案夾?
@cwpeng-course
@cwpeng-course 3 жыл бұрын
程式檔案路徑變了,所以執行的時候會找不到檔案,需要的時候再拿出來就可以。 __pycache__ 是 Python 對封包處理的一個快取,讓下次執行會更快速,你可以隨時刪除它不會影響程式運作。
@Andrew-rw4op
@Andrew-rw4op 3 жыл бұрын
@@cwpeng-course 了解了 謝謝老師 不過想知道有沒有在移動到別的檔案路徑後 也能順利執行的方法嗎? 還是說其實要用的時候再拿出來比較方便呢? 再麻煩老師解答ㄌ!
@Lars23196
@Lars23196 4 жыл бұрын
老師,我把過去課程都丟進去backup但是main.py都不能執行,顯示Traceback (most recent call last): File "main.py", line 3, in result=geometry.point.distance(3,4) AttributeError: module 'geometry.point' has no attribute 'distance,請問是為甚麼?
@cwpeng-course
@cwpeng-course 4 жыл бұрын
資料夾和檔案結構會影響封包的結構,所以如果有移動過檔案到不同的資料夾,必須有對應的調整。 需要進一步檢查執行程式的位置,資料夾配置狀況,才有辦法判斷得更仔細哦 ~
@Lars23196
@Lars23196 4 жыл бұрын
​@@cwpeng-course >backup -geometry > __pycache__ -__init__.py -line.py -point.py -main.py 這有甚麼錯嗎?
@chiatehuang9788
@chiatehuang9788 4 жыл бұрын
你會不會把distance函式寫到line.py去了
@白飯魚-k7w
@白飯魚-k7w 4 жыл бұрын
感謝老師,這樣更能理解封包的使用了~
@cwpeng-course
@cwpeng-course 4 жыл бұрын
很高興對你有幫助 :)
@raja78902010
@raja78902010 4 жыл бұрын
想問一下老師,封包的功能是簡略式子寫法嗎? 就好像不需要像上一個 影片,還需先告知路徑才能找到資料夾
@sa760724
@sa760724 4 жыл бұрын
我猜會不會是封包可能只能掃描同資料夾下的~ 導入路徑可以導入其他更遠的地方?
@cwpeng-course
@cwpeng-course 4 жыл бұрын
感謝 @Chen Orion 的回應。 封包就是讓你模組化程式的一種工具,如果你有很多模組,可以歸類成一個更大的分類,就會想使用封包。至於路徑,只是讓 Python 去尋找模組或封包的位置,剛好我們的封包只要從專案路徑去找就可以找到對應的資料夾,就不用特別加入了。
@67890RJ
@67890RJ 4 жыл бұрын
請問老師,如果要在專案一中使用專案二下的封包,不直接把封包移到專案一資料夾,而是透過建立途徑來達成,這樣可行嗎?建立途徑的方法也是使用 sys.path.append() 嗎?
@cwpeng-course
@cwpeng-course 4 жыл бұрын
是哦,可以 ~~~~
@zejim2416
@zejim2416 6 жыл бұрын
請問老師,我記得之前的影片是說,len的用法是算出列表資料的長度,在這支影片卻是當函式名稱使用,請問這樣不會重疊到用法嗎?
@cwpeng-course
@cwpeng-course 6 жыл бұрын
我們在使用模組中的函式時,要先載入並加上封包和模組的名稱,然後才接函式名稱,像是 geometry.line.len(1,1,3,3) 這樣,所以和內建的 len 函式是可以分開運作的嘍 ~
@Cousinmoview
@Cousinmoview 5 жыл бұрын
@@cwpeng-course 可以geometry.line.len(1,1,3,3) as len嗎?
@詹耕銓
@詹耕銓 4 жыл бұрын
老師好 如果把之前寫的主程式放在backup中,那當下次在終端機測試時會找不到,這個時候是不是要像上一個影片那樣:使用新增載入模組搜尋的路徑???
@kill13790
@kill13790 4 жыл бұрын
我的解決方法是修改新增的路徑 sys.path.append("modules")->sys.path.append("backup/modules")就可以找到囉
@cwpeng-course
@cwpeng-course 4 жыл бұрын
感謝 @阿飛 的分享,確認執行檔案和模組路徑相對關係是重要的事情,所以改變資料夾結構必須做相對應的調整 ~
@詹耕銓
@詹耕銓 4 жыл бұрын
#阿飛 謝謝你 我想問這兩行都要打出來嗎 還是上下是獨立的? (編程菜鳥😂)
@kill13790
@kill13790 4 жыл бұрын
詹耕銓 只要打修改後的那行code就可以了 我也是菜鳥,努力學習中🤣
@詹耕銓
@詹耕銓 4 жыл бұрын
阿飛 了解 謝謝
@2031-w8l
@2031-w8l Жыл бұрын
老師我打的時候一直顯示AttributeError: module 'geometry.point' has no attribute 'distance' 這樣要怎麼解決 我已經和影片中打的一樣了
@2031-w8l
@2031-w8l Жыл бұрын
以解決
@cwpeng-course
@cwpeng-course Жыл бұрын
恭喜解決 ~
@yuchieh._.
@yuchieh._. 4 жыл бұрын
老師你好,不好意思想請教您這個問題: from django.shortcuts import render, get_object_or_404 from .models import Blog def blog_list(request): context = {} context['blogs'] = Blog.objects.all() context['blogs_count'] = Blog.objects.all().count() return render (request,'blog_list.html', context) 結果出現:ImportError: attempted relative import with no known parent package 我查了很多解決辦法 依然無法解決 T^T
@cwpeng-course
@cwpeng-course 4 жыл бұрын
from .models import Blog 這段應該是有問題的,他需要在特定情境下才會順利執行。 建議仔細閱讀你參考的程式來源說明。
@yangwang2617
@yangwang2617 Жыл бұрын
請問那個init有必要嗎 我沒有加init 試了很多次都沒出錯 如果吧module 丟到其他檔案裡 程式也自動跑出 檔名.模組
@cwpeng-course
@cwpeng-course Жыл бұрын
以前是必要的,現在可以不寫沒錯。
@mollymm7832
@mollymm7832 4 жыл бұрын
讲的不错,能很好的懂
@cwpeng-course
@cwpeng-course 4 жыл бұрын
谢谢你的回馈 :)
@王孟肜
@王孟肜 3 жыл бұрын
那個geometry只是單純的一個資料夾嗎 然後裏頭再新增我們所需之模組以及__init__.py
@cwpeng-course
@cwpeng-course 3 жыл бұрын
是,就只是一個資料夾,Python 的程式可以把這個資料夾認定成是一個封包以及底下的模組檔案。
@警刻救援
@警刻救援 3 жыл бұрын
老師好喔~ 想請問影片中 [線段]計算後式小數點很多 我想取後兩位該怎麼寫入呢?
@cwpeng-course
@cwpeng-course 3 жыл бұрын
你可以用以下這樣的語法做輸出: a=13.94655 print("%.2f" % a)
@張語恩-u3m
@張語恩-u3m 4 жыл бұрын
想請問老師,我在跑print("距離",result)的程式時,出來的結果“距離”會變成'\xe8\xb7\x9d\xe9\x9b\xa2'這一串,請問是什麼原因還有該怎麼解決?謝謝老師!
@刘小顺-l4j
@刘小顺-l4j 4 жыл бұрын
试一试是不是输入法有没有切换回英文,我刚刚就是这个原因
@cwpeng-course
@cwpeng-course 4 жыл бұрын
可能是版本的問題,確定有安裝 Python 3 新的版本之後,如果是 Mac 電腦,執行時使用:python3 檔案名稱
@王孟肜
@王孟肜 3 жыл бұрын
想請問如果沒有新增那個init會怎樣嗎?因為上部影片部也沒有新增,單依然可以import,還是因為先前的範例只有一個模組
@cwpeng-course
@cwpeng-course 3 жыл бұрын
單一的 Python 檔案,就只是一個模組,載入模組就和 __init__ 這個檔案無關。
@王莠婷
@王莠婷 3 жыл бұрын
感謝老師~
@cwpeng-course
@cwpeng-course 3 жыл бұрын
不會呦,有幫助就好 :)
@JSONNNNN
@JSONNNNN 3 жыл бұрын
請問還需要寫 sys.path.append("modules") 嗎?
@cwpeng-course
@cwpeng-course 3 жыл бұрын
如果按照影片中的資料夾和檔案結構配置,通常是需要的。不過也要看你的執行環境是否和我這邊是否有些關鍵差異 ~
@topchoco6380
@topchoco6380 2 жыл бұрын
想問一下封包內再用更多子封包,這樣是主封包跟每個子封包內都要有__init__,py對嗎?
@cwpeng-course
@cwpeng-course 2 жыл бұрын
對哦 ~
@63.5cu6
@63.5cu6 5 жыл бұрын
老師 我程式都按照影片中的做,這無法執行的原因? PS D:\python-taining> python main.py Traceback (most recent call last): File "main.py", line 3, in result=geometry.piont.distance(3,4) AttributeError: module 'geometry' has no attribute 'piont'
@63.5cu6
@63.5cu6 5 жыл бұрын
沒事了,我知道錯在哪了~
@cwpeng-course
@cwpeng-course 5 жыл бұрын
有解決就好 :)
@i_am_fucking_busy
@i_am_fucking_busy 5 жыл бұрын
我也遇到同樣的狀況,請問您如何解決?謝謝
@jameske119
@jameske119 5 жыл бұрын
@@i_am_fucking_busy 需要把 point.py 的程式處存 才可以進行檔案裡的函式
@i_am_fucking_busy
@i_am_fucking_busy 5 жыл бұрын
@@jameske119 謝謝您>
@張振瑋-m8d
@張振瑋-m8d 3 жыл бұрын
想問一下老師為什麼放到backup的資料夾裡的程式不能跑了
@sa760724
@sa760724 3 жыл бұрын
理論上跟上一篇path路徑問題一樣~ 你放到backup資料夾後~ 已經不再預設sys裡面的path
@cwpeng-course
@cwpeng-course 3 жыл бұрын
感謝 @Chen Orion 的說明,很清楚 :)
@stmax0924
@stmax0924 5 жыл бұрын
請問這是怎麼了 Traceback (most recent call last): File "main.py", line 3, in result=geometry.print.distance(3,4) AttributeError: module 'geometry' has no attribute 'print'
@stmax0924
@stmax0924 5 жыл бұрын
我都有儲存了但為何不能
@apsincsoros1538
@apsincsoros1538 5 жыл бұрын
你把print这个名字改一下,应该是与Python保留字冲突了
@apsincsoros1538
@apsincsoros1538 5 жыл бұрын
謝昀儒 彭彭写的是point,你这个名字print是打印输出
@stmax0924
@stmax0924 5 жыл бұрын
@@apsincsoros1538感恩
@stmax0924
@stmax0924 5 жыл бұрын
@@apsincsoros1538 Traceback (most recent call last): File "main.py", line 6, in result=line.slpoe(1,1,3,3) AttributeError: module 'geometry.line' has no attribute 'slpoe' 這個事怎麼了 請問您是怎麼判斷的
@ruby-m6p
@ruby-m6p 3 жыл бұрын
請問老師 如果使用Spyder寫程式可以做封包的動作嗎
@cwpeng-course
@cwpeng-course 3 жыл бұрын
應該可以,但我也不確定方法,我自己沒用過 ~
@hsiehhao-yun3056
@hsiehhao-yun3056 4 жыл бұрын
Traceback (most recent call last): File "main.py", line 3, in result=geometry.point.distance(3,4) AttributeError: module 'geometry.point' has no attribute 'distance'
@cwpeng-course
@cwpeng-course 4 жыл бұрын
回應一下,消除我的通知 XDDDD
@張晉-t4j
@張晉-t4j 4 жыл бұрын
@@cwpeng-course 請問老師這問題的解決方法是?
@SUJUloveforever13
@SUJUloveforever13 4 жыл бұрын
@@張晉-t4j 你在 point.py裡面有寫下面這個嗎? def distance(x,y): return (x**2+y**2)**0.5 看起來是你沒有定義distance是什麼,所以他不知道怎麼幫你算
@tx1969
@tx1969 2 жыл бұрын
同样的问题,我把point.py运行一遍就可以了,不知道为什么
@jcy4173
@jcy4173 2 жыл бұрын
老師您好,我想問沒有封包會怎樣嗎?因為好像沒有封包也可以載入
@cwpeng-course
@cwpeng-course 2 жыл бұрын
不會怎麼樣哦,它就是一種讓我們可以切割程式碼、分類程式碼的工具,要怎麼使用是開發者的決定。
@shon6745
@shon6745 3 жыл бұрын
請問geometry為什麼不能換成try呢 無法使用Try當封包名稱
@cwpeng-course
@cwpeng-course 3 жыл бұрын
try 是程式語言的保留字 ( 不能用的名字 ),所以不能使用 ~
@魏琪娟
@魏琪娟 3 жыл бұрын
請問我照著老師說的打為什麼會出現 "geometry" is not accessed 呢?
@jameschang1258
@jameschang1258 3 жыл бұрын
ctrl+s儲存
@魏琪娟
@魏琪娟 3 жыл бұрын
已儲存還是有出現耶...
@jameschang1258
@jameschang1258 3 жыл бұрын
這要看你打的程式碼才比較能知道..
@cwpeng-course
@cwpeng-course 3 жыл бұрын
感謝 @James Chang 的回應 :) 確實要看看程式碼和資料夾結構才有辦法判斷哦 ~
@魏琪娟
@魏琪娟 3 жыл бұрын
謝謝回復~我的程式碼跟老師影片中的一模一樣耶... 程式run出來一樣會有與老師相同的答案,但在problems這邊一直會有這個問題... 改路徑之後才開始出現這個問題 還是跟python的般本有關係呢? 我的版本是3.9.5
@華陀-e6n
@華陀-e6n 4 жыл бұрын
超級感謝老師的講解,一直在網路上找關於python架構,突然發現這裡竟然有如此完整的教學影片,真的受益良多
@cwpeng-course
@cwpeng-course 4 жыл бұрын
不客氣呦,很高興對你有幫助 :)
@young83814
@young83814 4 жыл бұрын
老師那這樣跟上一堂教的,用append有甚麼差別呢?
@cwpeng-course
@cwpeng-course 4 жыл бұрын
上一堂課是設定 Python 會去搜尋的資料夾,封包則是在搜尋的資料夾底下,還可以建立封包資料夾的概念 ~
@簡甄筠
@簡甄筠 3 жыл бұрын
請問封包建立後 按右鍵沒有delete可以選 請問是要怎麼把封包刪掉呢?謝謝
@cwpeng-course
@cwpeng-course 3 жыл бұрын
選擇封包的資料夾,直接按鍵盤上的 Delete 也可以,或者用作業系統本身的檔案管理員也可以直接操作資料夾。
@簡甄筠
@簡甄筠 3 жыл бұрын
@@cwpeng-course 謝謝老師回復喔
Python 文字檔案的讀取和儲存 By 彭彭
30:15
彭彭的課程
Рет қаралды 227 М.
Python Module 模組的載入與使用 By 彭彭
25:14
彭彭的課程
Рет қаралды 193 М.
黑天使被操控了#short #angel #clown
00:40
Super Beauty team
Рет қаралды 61 МЛН
Python 亂數與統計模組 By 彭彭
23:41
彭彭的課程
Рет қаралды 107 М.
Python爬蟲+免費10年台股 | TW-stock
13:24
k66
Рет қаралды 3 М.
Python 錯誤、例外處理 Exception Handling By 彭彭
26:57
彭彭的課程
Рет қаралды 14 М.
Java Package 封包、權限控制 - Java 入門課程教學
52:28
彭彭的課程
Рет қаралды 7 М.
Python 裝飾器工廠 Decorator Factory By 彭彭
32:40
彭彭的課程
Рет қаралды 19 М.
Python 裝飾器 Decorator - 基本篇  By 彭彭
28:51
彭彭的課程
Рет қаралды 26 М.
Python 回呼函式 Callback Function By 彭彭
22:07
彭彭的課程
Рет қаралды 20 М.
Python 生成器 Generator 基礎使用 By 彭彭
29:24
彭彭的課程
Рет қаралды 25 М.