最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 編寫轉(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)BLAST

    使用python實(shí)現(xiàn)BLAST

    最近在自學(xué)python,又用python實(shí)現(xiàn)了一下BLAST。 這次更新了打分函數(shù)如下,空位罰分改為-5,但不區(qū)分gap open 和 gap extend。
    2018-02-02
  • python調(diào)用dubbo接口的實(shí)現(xiàn)步驟

    python調(diào)用dubbo接口的實(shí)現(xiàn)步驟

    本文主要介紹了python調(diào)用dubbo接口的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • 在Python中利用pickle保存變量的實(shí)例

    在Python中利用pickle保存變量的實(shí)例

    今天小編就為大家分享一篇在Python中利用pickle保存變量的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python函數(shù)裝飾器用法實(shí)例詳解

    python函數(shù)裝飾器用法實(shí)例詳解

    這篇文章主要介紹了python函數(shù)裝飾器用法,以實(shí)例形式較為詳細(xì)的分析了Python函數(shù)裝飾器的常見(jiàn)使用技巧,需要的朋友可以參考下
    2015-06-06
  • Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié)

    Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié)

    這篇文章主要介紹了Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié),本文總結(jié)了最基本最常用的一些操作,需要的朋友可以參考下
    2014-11-11
  • DjangoWeb使用Datatable進(jìn)行后端分頁(yè)的實(shí)現(xiàn)

    DjangoWeb使用Datatable進(jìn)行后端分頁(yè)的實(shí)現(xiàn)

    這篇文章主要介紹了DjangoWeb使用Datatable進(jìn)行后端分頁(yè)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • 新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

    新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案

    這篇文章主要介紹了新手常見(jiàn)Python錯(cuò)誤及異常解決處理方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python實(shí)現(xiàn)合并同一個(gè)文件夾下所有txt文件的方法示例

    Python實(shí)現(xiàn)合并同一個(gè)文件夾下所有txt文件的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)合并同一個(gè)文件夾下所有txt文件的方法,涉及Python針對(duì)文件的遍歷、讀取、寫入等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • PyTorch之前向傳播函數(shù)forward用法解讀

    PyTorch之前向傳播函數(shù)forward用法解讀

    這篇文章主要介紹了PyTorch之前向傳播函數(shù)forward用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python Selenium庫(kù)的基本使用教程

    Python Selenium庫(kù)的基本使用教程

    這篇文章主要給大家介紹了關(guān)于Python Selenium庫(kù)的基本使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論

泗洪县| 水城县| 慈利县| 双城市| 连州市| 朔州市| 洮南市| 大渡口区| 乌海市| 铜鼓县| 金阳县| 惠水县| 正定县| 奇台县| 辉南县| 新营市| 阜阳市| 江山市| 海宁市| 河曲县| 陇西县| 嘉峪关市| 石景山区| 修文县| 滨海县| 和硕县| 陆河县| 周口市| 观塘区| 华坪县| 阜新市| 临湘市| 五峰| 邵阳县| 阿克陶县| 陵川县| 铜陵市| 九龙坡区| 呼伦贝尔市| 浦北县| 绩溪县|