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

Cpython編譯后再使用Pyinstaller打包的詳細(xì)教程

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

一、Cpython

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

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

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

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

1.2 使用Cpython編譯項(xiàng)目步驟

example:
hello.py

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

1.2.1 安裝Cpython

pip3 install Cython

1.2.2 編寫(xiě)轉(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文件

進(jìn)入目錄

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

1.2.4 測(cè)試編譯好的so文件

將py文件等相關(guān)編譯文件刪除

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

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

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

二、 Pyinstaller

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

Pyinstaller打包的可執(zhí)行文件并不是跨平臺(tái)的,而是希望在哪個(gè)平臺(tái)上運(yùn)行就需要在哪個(gè)平臺(tái)上進(jìn)行打包。

安裝pyinstaller:

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

2.1 使用pyinstaller打包 py文件

項(xiàng)目目錄

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文件以原來(lái)的工程組織形式(module)存放好,注意module下要有非編譯的__init__.py, 工程的main.py也不要編譯

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

項(xiàng)目目錄

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

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

相關(guān)文章

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

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

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

    使用pymysql寫(xiě)入中文的問(wèn)題

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

    Django單元測(cè)試中Fixtures用法詳解

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

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

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

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

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

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

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

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

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

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

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

    Python3如何解決字符編碼問(wèn)題詳解

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

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

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

最新評(píng)論