Python程序打包

Python社區(qū)文化崇尚開源肛响,復用质况,所以Python程序多以包的形式發(fā)布在PyPI這樣的包管理網(wǎng)站上威彰,而使用者默認已經(jīng)具備了Python的運行環(huán)境粪薛,這時只需要使用pip這類的工具,直接下載安裝即可使用寇钉。

作為一個公司或者個人開發(fā)者刀疙,我們不能指望我們的目標用戶環(huán)境已經(jīng)安裝了Python環(huán)境,更進一步扫倡,我們并不想我們寫的代碼被其他人看到谦秧。在這種情況下我們就有了兩個核心訴求。

  1. Python程序可以打包成像window中的exe這樣的獨立運行的程序撵溃。
  2. 程序可以加密或者編譯成二進制碼油够,而不是pyc這樣的字節(jié)碼,以防止被輕松反譯出原碼征懈。

打包成exe程序

目前打包成exe可執(zhí)行文件石咬,比較成熟的方案包括py2exe和cx_freeze。這兩種方案的操作基本大同小異卖哎,寫好setup.py鬼悠,然后執(zhí)行即可。官方文檔比較詳細亏娜,也可以在網(wǎng)絡上輕松找到其他參考資料焕窝,在此不再細說。這種情況下维贺,我們可以把程序運行信賴的Python環(huán)境和各個package都打包成一份它掂,這個時候,我們就可以將打包出來的包復制到其他的電腦直接運行了溯泣,與其他的程序并沒有什么區(qū)別虐秋。

當然,這樣打包出來的文件垃沦,除了依賴庫原生是dll的客给,會被加載進來,其他的python代碼肢簿,則會被編譯成pyc文件打包成lib添加到我們的目錄當中靶剑。我們都知道pyc文件是可以被簡單還原成源碼的,并不存在什么技術門檻池充,要想將代碼編譯生成dll或者exe桩引,我們還需要其他辦法。

編譯成二進制文件

Python的一般的執(zhí)行過程收夸,是python解釋器將pyc文件中的指令坑匠,即字節(jié)碼轉換成操作系統(tǒng)的機器碼,然后再進行執(zhí)行咱圆。我們想將源碼編譯成二進制碼笛辟,這就跳過了解釋器的將字節(jié)碼轉換成機器碼的過程功氨,這并沒有省略多少時間,但客觀上完成了源碼的加密手幢。那么捷凄,我們就來介紹一下Cython。

Cython是python的超集围来,也就是說跺涤,你寫的python代碼將完全可以被Cython接受,更重要的是监透,你還可以寫一些類型確定的代碼桶错,暫時拋下動態(tài)的語言屬性,在某些模塊出胀蛮,寫出比擬C語言速度的代碼院刁。當然,這不是我們當前關注的重點粪狼,我們只知道退腥,通過Cython我們可以將源碼編譯成pyd文件就可以了。

所以再榄,對于重點代碼狡刘,或者你想保護的代碼,將其通過cython編譯成pyd,然后以模塊的形式來加以調用就是可行的方案了困鸥。什么嗅蔬?你想保護所有代碼?疾就!不管你的代碼是不是那么值錢澜术,我們還有另外一個解決方案。

王炸登場虐译,Nuitka瘪板!這個軟件可以幫我們輕松實現(xiàn)吴趴,我們想將哪些源碼進行打包漆诽,甚至允許我們將所有的內容將整合到一個可執(zhí)行文件當中,用法也是極其簡單的锣枝,在這里也做說明厢拭,直接訪問官網(wǎng)即可。

爬坑

寫程序這件事撇叁,如果太順利供鸠,總感覺不真實,所以陨闹,有坑才是常態(tài)楞捂。我的項目使用PyQt5+twisted作為框架薄坏,在打包后,發(fā)現(xiàn)程序登錄后直接就卡死了寨闹,界面也沒有正確顯示胶坠,而且在日志中也沒有發(fā)現(xiàn)什么異常。再回頭查資料繁堡,從官網(wǎng)的說明中沈善,發(fā)現(xiàn)其對PyQt5的支持并不全面,而對PyQt6就信心滿滿了椭蹄。所以闻牡,我了一天時間將工程從PyQt5升級到了PyQt6, 一通的代碼修改绳矩,順便讓我了解了一下PyQt5與PyQt6的不同之處罩润。但問題并沒有消失,于是繼續(xù)定位翼馆,最終發(fā)現(xiàn)是QThread的原因哨啃!而另一篇帖子則無意中提到了PySide6,我順便就抱著試試看的心情將使用的包從PyQt6轉換成了PySide6,問題解決写妥!

  • PySide6是Qt的母公司自己推出的產品拳球,屬于親兒子,而且在商業(yè)使用中不受限制珍特。
  • PyQt6是第三方公司在市場推出的一個產品祝峻,如果要商用,應該是要收費的扎筒,或者商用的產品也必須進行開源莱找。

前后折騰了三天的時間,以上就是自己的所得嗜桌。之所以沒有將代碼或者命令行細節(jié)貼在這里奥溺,是因為不同的人的需求并不完全一致,而官方網(wǎng)站也有更詳細的說明骨宠,還是直接去官方參考最佳浮定。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市层亿,隨后出現(xiàn)的幾起案子桦卒,更是在濱河造成了極大的恐慌,老刑警劉巖匿又,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件方灾,死亡現(xiàn)場離奇詭異,居然都是意外死亡碌更,警方通過查閱死者的電腦和手機裕偿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門洞慎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘿棘,你說我怎么就攤上這事拢蛋。” “怎么了蔫巩?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵谆棱,是天一觀的道長。 經(jīng)常有香客問我圆仔,道長垃瞧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任坪郭,我火速辦了婚禮个从,結果婚禮上,老公的妹妹穿的比我還像新娘歪沃。我一直安慰自己嗦锐,他們只是感情好,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布沪曙。 她就那樣靜靜地躺著奕污,像睡著了一般。 火紅的嫁衣襯著肌膚如雪液走。 梳的紋絲不亂的頭發(fā)上碳默,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天,我揣著相機與錄音缘眶,去河邊找鬼嘱根。 笑死,一個胖子當著我的面吹牛巷懈,可吹牛的內容都是我干的该抒。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼顶燕,長吁一口氣:“原來是場噩夢啊……” “哼凑保!你這毒婦竟也來了?” 一聲冷哼從身側響起割岛,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤愉适,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后癣漆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡剂买,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年惠爽,在試婚紗的時候發(fā)現(xiàn)自己被綠了癌蓖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡婚肆,死狀恐怖租副,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情较性,我是刑警寧澤用僧,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站赞咙,受9級特大地震影響责循,放射性物質發(fā)生泄漏。R本人自食惡果不足惜攀操,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一院仿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧速和,春花似錦歹垫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碰凶,卻和暖如春若贮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痒留。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工谴麦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伸头。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓匾效,卻偏偏與公主長得像,于是被迫代替她去往敵國和親恤磷。 傳聞我的和親對象是個殘疾皇子面哼,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內容