python调用pyd_Python生成pyd文件
Python的腳本文件是開(kāi)源的,量化策略的安全性沒(méi)有保障。因此需要保護(hù)源碼。那么要對(duì)Python代碼進(jìn)行混淆、加密保護(hù)。
混淆代碼,我準(zhǔn)備使用pyminifier。而加密處理,就比較麻煩。
Python有py、pyc、pyw、pyo、pyd等文件格式。
其中,pyc是二進(jìn)制文件。但很容易被反編譯。
pyw也不行,只是隱藏命令行界面而已,可以作為入口腳本。
pyo和pyc差不多,也容易被反編譯。
最后剩下pyd格式。pyd格式是D語(yǔ)言(C/C++綜合進(jìn)化版本)生成的二進(jìn)制文件,實(shí)際也會(huì)是dll文件。該文件目前位置沒(méi)找到可以被反編譯的消息,只能被反匯編。Sublime text編輯器也是使用該格式。
Python的py文件生成pyd文件步驟如下。
1、安裝Cython
可以使用pip命令安裝Cython。
pip?install?cython
2、處理vcvarsall.bat
若不處理,可能會(huì)出現(xiàn)“Unable to find vcvarsall.bat”錯(cuò)誤。
安裝Cython之后,還需要指定vcvarsall.bat的位置。
vcvarsall.bat是VC編譯Python環(huán)境的文件之一。而vcvarsall.bat需要安裝VC For Python2.7。我的Python是2.7,剛好可以使用這個(gè)。至于3.x版本不知道微軟更新了沒(méi)有。
安裝成功之后,再修改設(shè)置。讓Cython可以找到vcarsall.bat。此處有兩種方案。
我采用方案1,親測(cè)可用。方案2未測(cè)試,看似可用。
3、創(chuàng)建工作目錄并生成pyd文件
這里有一個(gè)坑。程序所在的目錄路徑不能包含中文文字。所以我在E盤(pán)下創(chuàng)建一個(gè)test文件夾,用于放置要處理的python文件。
簡(jiǎn)單寫(xiě)了一個(gè)測(cè)試文件(命名為test.py):
#coding:utf-8
def?hello():
print("Hello?world")
input("")
在該目錄下,再新建一個(gè)py文件(命名為setup.py):
from?distutils.core?import?setup
from?Cython.Build?import?cythonize
setup(
name?=?'Hello?world?app',
ext_modules?=?cythonize("test.py"),
)
接著,再打開(kāi)cmd,跳到該目錄并執(zhí)行如下命令:
python?setup.py?build_ext?--inplace
最終生成pyd文件
其中,build是生成過(guò)程使用到的臨時(shí)文件。test.c也是臨時(shí)文件,可以打開(kāi)看看傳說(shuō)中的D語(yǔ)言代碼。
test.pyd是我們所需的文件。
pyd文件可以像平常一樣使用import引入模塊的方式正常使用。
后來(lái),我嘗試使用py2exe打包pyd文件。還需要?jiǎng)?chuàng)建一個(gè)入口腳本(命名為index.py):
import?test
if?__name__=="__main__":
test.hello()
為了方便打包,我重新創(chuàng)建一個(gè)目錄。把index.py和test.pyd復(fù)制到該目錄。
如何安裝和使用py2exe這里我就不說(shuō)了,自行百度一下。
分別用test.pyd和未處理的test.py打包效果如下:
1)用test.pyd
直接可以在index.exe對(duì)應(yīng)的位置找到該文件。
2)用test.py
在該目錄下沒(méi)有test.py文件。該文件在library.zip中。
測(cè)試結(jié)果,用py2exe可以正常使用pyd文件。
ps:若用Cython出現(xiàn)如下錯(cuò)誤,說(shuō)明文件的編號(hào)和python腳本設(shè)置 #coding設(shè)置的編碼不一致。保存一致編碼即可解決該問(wèn)題。
Decoding error, missing or incorrect coding= at top of source (cannot decode with encoding 'utf8': invalid start byte)
總結(jié)
以上是生活随笔為你收集整理的python调用pyd_Python生成pyd文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: getrealdays oracle_o
- 下一篇: input禁止光标_表单中readonl