欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Cpython編譯后再使用Pyinstaller打包的詳細教程

 更新時間:2023年11月27日 15:03:54   作者:一天一杯養(yǎng)樂多  
pyinstaller是一個第三方庫,它能夠在Windows、Linux、 Mac OS X 等操作系統(tǒng)下將 Python 源文件打包,通過對源文件打包,這篇文章主要介紹了Cpython編譯后再使用Pyinstaller打包的詳細教程,需要的朋友可以參考下

一、Cpython

Python是一門解釋型語言,當我們想讓其他人運行我們的代碼時,如果直接將.py源代碼發(fā)送給他人,那么源代碼將沒有任何安全性可言,也就是任何一個人都可以打開源代碼一看究竟,任何人都可以隨意修改源代碼。

而為了防止源代碼泄露,可以將Python源代碼編譯生成.pyd庫文件或者.so庫文件:Windows平臺生成pyd文件,Linux生成so文件。

1.1 Python有以下幾種類型的文件

py:Python控制臺程序的源代碼文件
pyw:Python帶用戶界面的源代碼文件
pyx:Python包源文件
pyc:Python字節(jié)碼文件(可通過逆向編譯來得到源碼)
pyo:Python優(yōu)化后的字節(jié)碼文件(可通過逆向編譯來得到源碼)
pyd:在Windows平臺上Python的庫文件(Python版DLL)
so:在Linux平臺上Python的庫文件是so文件

1.2 使用Cpython編譯項目步驟

example:
hello.py

def say_hello():
    print("Hello!")

1.2.1 安裝Cpython

pip3 install Cython

1.2.2 編寫轉(zhuǎn)換文件

setup.py

from setuptools import setup
from Cython.Build import cythonize
# python3 setup.py build_ext --inplace
# 所有需要編譯的py文件
all_py_file = ['hello.py']
setup(
    name="hello",
    ext_modules=cythonize(all_py_file),
    version="1.0",
    author="Leo",
    author_email="LeoLi.Li@groupm.com"
)

1.2.3 執(zhí)行轉(zhuǎn)換生成so文件

進入目錄

執(zhí)行:python3 setup.py build_ext --inplace

1.2.4 測試編譯好的so文件

將py文件等相關編譯文件刪除

測試是否可以正常導入并使用hello.py的函數(shù)

1. 3yd/so文件反編譯?

pyd/so文件是由 Cython首先把python源碼翻譯成了 .c文件(這個過程基本不可逆),再把這個.c文件編譯成了pyd/so文件。

二、 Pyinstaller

pyinstaller是一個第三方庫,它能夠在Windows、Linux、 Mac OS X 等操作系統(tǒng)下將 Python 源文件打包,通過對源文件打包, Python 程序可以在沒有安裝 Python 的環(huán)境中運行,也可以作為一個 獨立文件方便傳遞和管理。

Pyinstaller打包的可執(zhí)行文件并不是跨平臺的,而是希望在哪個平臺上運行就需要在哪個平臺上進行打包。

安裝pyinstaller:

python3 -m pip install --no-cache-dir pyinstaller -i https://mirrors.aliyun.com/pypi/simple/;

2.1 使用pyinstaller打包 py文件

項目目錄

main.py

from hello import say_hello
if __name__ == '__main__':
say_hello()

打包

pyinstaller  --name say_hello --onedir --log-level WARN --strip --paths /leo/gme/pyinstaller_demo --distpath /leo/gme/pyinstaller_demo/package /leo/gme/pyinstaller_demo/main.py

執(zhí)行打包后的可執(zhí)行文件:

2.2 使用pyinstaller打包 Cpython編譯后的so

Cpython可以將py編譯成so文件,將編譯好的so文件以原來的工程組織形式(module)存放好,注意module下要有非編譯的__init__.py, 工程的main.py也不要編譯

pyinstaller的打包過程會從main.py走一遍所有調(diào)用的module,并打包進去,但是編譯好的pyd不會被識別import,這就是為什么要保留原來module的__init__.py, 對于這些已經(jīng)編譯為so的module,屬于隱式import,需要在打包時加入–hidden-import

項目目錄

main.py

from hello import say_hello
if __name__ == '__main__':
    say_hello()

打包

pyinstaller   --hidden-import "hello" --name say_hello --onedir  --log-level WARN   --strip --paths /leo/gme/pyinstaller_demo --distpath /leo/gme/pyinstaller_demo/package   /leo/gme/pyinstaller_demo/main.py

執(zhí)行打包后的可執(zhí)行文件:

_internal 依賴的是so文件:

三、參考資料

Cpython編譯:https://www.cnblogs.com/gcgc/p/16529975.html
Pyinstaller介紹:https://blog.csdn.net/weixin_45953322/article/details/128774685
Pyinstaller打包so文件 https://blog.csdn.net/weixin_39916966/article/details/130781599

到此這篇關于Cpython編譯后再使用Pyinstaller打包的文章就介紹到這了,更多相關Cpython編譯Pyinstaller打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python實現(xiàn)貪吃蛇游戲

    python實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 使用pymysql寫入中文的問題

    使用pymysql寫入中文的問題

    這篇文章主要介紹了使用pymysql寫入中文的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Django單元測試中Fixtures用法詳解

    Django單元測試中Fixtures用法詳解

    這篇文章主要介紹了Django單元測試中Fixtures用法,通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Python實現(xiàn)APP自動化發(fā)微信群消息的示例代碼

    Python實現(xiàn)APP自動化發(fā)微信群消息的示例代碼

    本文主要介紹了Python實現(xiàn)APP自動化發(fā)微信群消息的示例代,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下碼
    2022-01-01
  • 使用Python將PDF轉(zhuǎn)換為文檔的方法實現(xiàn)

    使用Python將PDF轉(zhuǎn)換為文檔的方法實現(xiàn)

    要將PDF文件轉(zhuǎn)換為Doc格式,你可以使用 Python 模塊,它將讓你輕松地將 pdf 轉(zhuǎn)換為 doc ,在本文中,我們將探索使用 Python 將 PDF 文檔轉(zhuǎn)換為Doc文件,需要的朋友可以參考下
    2023-09-09
  • 深入了解python的tkinter實現(xiàn)簡單登錄

    深入了解python的tkinter實現(xiàn)簡單登錄

    這篇文章主要為大家介紹了python的tkinter實現(xiàn)簡單登錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 利用pandas向一個csv文件追加寫入數(shù)據(jù)的實現(xiàn)示例

    利用pandas向一個csv文件追加寫入數(shù)據(jù)的實現(xiàn)示例

    這篇文章主要介紹了利用pandas向一個csv文件追加寫入數(shù)據(jù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • python使用openpyxl操作excel的方法步驟

    python使用openpyxl操作excel的方法步驟

    這篇文章主要介紹了python使用openpyxl操作excel的方法步驟,詳細的介紹了openpyxl的常用屬性以及操作excel的方法,感興趣的可以了解一下
    2020-05-05
  • Python3如何解決字符編碼問題詳解

    Python3如何解決字符編碼問題詳解

    字符串是一種數(shù)據(jù)類型,但是,字符串比較特殊的是還有一個編碼問題。下面這篇文章主要給大家介紹了關于Python3如何解決字符編碼問題的相關資料,文中介紹的還是相對比較詳細的,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • Python爬蟲采集微博視頻數(shù)據(jù)

    Python爬蟲采集微博視頻數(shù)據(jù)

    這篇文章主要介紹了利用Python爬蟲采集微博的視頻數(shù)據(jù),文中有非常詳細的代碼示例,對正在學python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-12-12

最新評論