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....