Python專案打包成二進位制的方法
阿新 • • 發佈:2021-01-03
Python專案打包
python本身是一種指令碼語音,釋出的話,直接釋出原始碼就可以了,但是,可能有些公司並不想釋出原始碼,那麼,就涉及到打包了,網上有很的打包教程,其實我也沒有認真去研究,因為我只想簡單點,所以,我打算直接編譯成pyc二進位制檔案來發布,就可以了。
問題
編譯成二進位制檔案(*.pyc)之後,檔名都變了,模組之間怎麼引用?
網上的例子,大都是對單個檔案編譯的介紹,對整個目錄編譯的話,也都是輸出到相應的資料夾下,需要單獨抽取出來,釋出。
解決問題
一般編譯之後的檔案命名為:比如我的原始檔為test.py,編譯後輸出到__pycache__資料夾下test.cpython-37.pyc,要保持模組引用不改變,那麼必須在編譯之後重新命名為test.pyc檔案,批註:37是因為我使用的python版本為3.7.4所以含有37,其他版本要做相應的調整。
編碼實現
importos importshutil importcompileall frompathlibimportPath versions=".cpython-37" pycache="__pycache__" build_dir="build" root=os.getcwd() print("正在編譯檔案...請等待...") compileall.compile_dir(root)#編譯 build=Path(root,build_dir) ifbuild.exists(): print("正在移除build目錄...請等待...") shutil.rmtree(build) print("正在複製檔案...請等待...") shutil.copytree(root,build)#複製檔案到build目錄 forroot,dirs,filesinos.walk(build):#開始遍歷檔案 #root表示當前正在訪問的資料夾路徑 #dirs表示該資料夾下的子目錄名list #files表示該資料夾下的檔案list #遍歷檔案 forfinfiles: src=os.path.join(root,f) iff.endswith(".py"): os.remove(src) eliff.endswith(".pyc"): upper_dir=root.replace(pycache,"") dst=os.path.join(upper_dir,f.replace(versions,"")) shutil.copy(src,dst) forroot,filesinos.walk(build):#移除快取資料夾 print("正在移除快取檔案...請等待...") ifroot.endswith(pycache): shutil.rmtree(root) print("打包完成...請檢視目錄:"+str(build))
注意檔案中版本號的調整,基本上是通用的,所有的python專案都可以用拿來就用。程式碼很簡單,但是很實用。
牛人之所以是牛人,是因為你現在在踩的坑,他曾經都已經踩過了。
以上就是Python專案打包成二進位制的方法的詳細內容,更多關於Python專案打包成二進位制的資料請關注我們其它相關文章!