python打包編譯 python編譯及打包

2021-10-11 00:07:54 字數 2621 閱讀 4178

0、背景

python是一種物件導向的解釋型計算機程式語言,具有豐富和強大的庫,使用其開發產品快速高效。

python的解釋特性是將py編譯為獨有的二進位制編碼pyc檔案,然後對pyc中的指令進行解釋執行,但是pyc的反編譯卻非常簡單,可直接反編譯為原始碼,當需要將產品發布到外部環境的時候,原始碼的保護尤為重要。

1、python原始碼編譯至pyc檔案

使用python的py_compile模組實現python原始碼編譯pyc。

這裡舉乙個簡單的例子:在demo資料夾下有乙個demo.py,需要將demo.py編譯.pyc。

demo.py內容如下:

def print_hello():

print('hello')

在demo資料夾下新建setup.py,內容如下:

import py_compile

py_compile.compile(r'demo.py',r'demo.pyc')

在shell執行:

cd demo

python setup.py

在demo資料夾下,就會生成demo.pyc檔案。

2、python原始碼編譯.so檔案

python原始碼編譯至.so檔案的思路是先將py轉換為c**,然後編譯c為so檔案。

所需編譯環境:

python安裝:cython

pip install cython

linux 安裝:python-devel,gcc

yum install python-devel

yum install gcc

同樣舉上述例子:在demo資料夾下有乙個demo.py,需要將demo.py編譯.so。

demo.py內容如下:

def print_hello():

print('hello')

在demo資料夾下新建setup.py,內容如下:

from distutils.core import setup

from cython.build import cythonize

setup(ext_modules = cythonize(["demo.py"]))

在shell執行:

cd demo

python setup.py build_ext

在demo資料夾下,就會生成demo.c檔案,同時在demo資料夾下生成build資料夾,在build資料夾下包含生成的.so檔案。

3、自定義python模組打包發布

將自定義python模組打包發布有兩種,一種是將python原始碼打包發布,一種是將python原始碼轉換至動態鏈結庫.so檔案打包發布。下面介紹一下這兩種打包方式。

a)、使用python原始碼打包

同樣使用上述例子:在demo資料夾下有乙個demo.py,需要將demo.py打包。

在demo資料夾下新建setup.py,內容如下:

from distutils.core import setup

setup(name = 『demo』,

version = '1.0',

py_modules = ['demo'],

在shell執行:

cd demo

python setup.py bdist_wheel

在demo資料夾下,生成dist資料夾,dist資料夾中包含了生成的python模組。

b)、使用python原始碼編譯成.so打包

使用上述例子:在demo資料夾下有乙個demo.py,需要將demo.py打包。

首先將python原始碼轉換為c**:

在demo資料夾下新建generatec.py,內容如下:

from distutils.core import setup

from cython.build import cythonize

setup(ext_modules = cythonize(["demo.py"]))

然後將c**編譯打包,過程如下:

在demo資料夾下新建generatewhl.py,內容如下:

from setuptools import setup

from setuptools.dist import distribution

from distutils.core import extension

setup(name = 'demo',

version = '1.0',

ext_modules = [extension("demo",['demo.c'])],

將上述兩個檔案執行,如下:在demo資料夾下新建setup.py,內容如下:

import os

cmd1 = "python generatec.py build_ext"

os.system(cmd1)

cmd2 = "python generatewhl.py bdist_wheel"

os.system(cmd2)

在shell執行:

cd demo

python setup.py

在demo資料夾下,生成dist資料夾,dist資料夾中包含了生成的python模組。

c)、安裝解除安裝

可以使用pip直接安裝和解除安裝生成的python模組。

4、其他

利用pyinstaller打包python3程式

這裡我解壓到了d盤 接著進入win系統的cmd介面,在cmd狀態下進入pyinstaller檔案。然後輸入 最好以管理員身份執行 這裡是在python裡安裝pyinstaller模組 python setup.py install 必須確保你的機器上安裝了pywin32模組,如果沒有請自行安裝。以管...

使用pyinstaller打包python程式

使用python3.7 anaconda環境編寫了個程式,裡面使用了numpy pandas xgboost等包 想用pyinstaller打包成exe,pip install pyinstaller後無法打包成exe檔案 別人說是pyinstaller不相容python3.7 遂安裝py3.6環境...

python3編譯安裝 編譯安裝Python 3

目前python最新版為python 3,以下是編譯安裝python 3.7.0的方法,根據提示一行乙個命令輸入即可 安裝依賴 yum y install wget gcc gcc c libffi devel zlib devel wget 解壓tar xvjf python 3.7.0.tar....