1. 程式人生 > 程式設計 >Python專案打包成二進位制的方法

Python專案打包成二進位制的方法

Python專案打包

python本身是一種指令碼語音,釋出的話,直接釋出原始碼就可以了,但是,可能有些公司並不想釋出原始碼,那麼,就涉及到打包了,網上有很的打包教程,其實我也沒有認真去研究,因為我只想簡單點,所以,我打算直接編譯成pyc二進位制檔案來發布,就可以了。

問題

編譯成二進位制檔案(*.pyc)之後,檔名都變了,模組之間怎麼引用?
網上的例子,大都是對單個檔案編譯的介紹,對整個目錄編譯的話,也都是輸出到相應的資料夾下,需要單獨抽取出來,釋出。

解決問題

一般編譯之後的檔案命名為:比如我的原始檔為test.py,編譯後輸出到__pycache__資料夾下test.cpython-37.pyc,要保持模組引用不改變,那麼必須在編譯之後重新命名為test.pyc檔案,批註:37是因為我使用的python版本為3.7.4所以含有37,其他版本要做相應的調整。

需要按照原來的專案目錄結構輸出pyc檔案才能保證模組之間呼叫沒有問題。

編碼實現

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專案打包成二進位制的資料請關注我們其它相關文章!