天天看點

如何加密PYTHON程式

今天系裡的數學教授老史過來問我能不能幫他解決一個教學中遇到的問題。他有一個類似于Online Judge的Python程式,打算發給學生用于自測,但為了防止學生作弊,他又不想學生看到程式源代碼。是以問題是如何加密Python源代碼,同時又能讓學生運作他的Python程式。

我Google了一下說有個網上的軟體叫做Py2exe,可以把Python程式轉化為Windows下的EXE檔案。但是Py2exe似乎隻能做Python 2和Python 3的低級版本,Python3.4以上的程式都不能轉化。老史又跟我說Python在編譯過程中可以生成pyc檔案,就是一個對應于源代碼的二進制代碼,可以發這個pyc檔案給學生執行。pyc檔案很容易生成:

C:\> python
>>> import py_compile
>>> py_compile.compile('1.py')      

我們拿到了這個pyc檔案,卻發現它不能輕按兩下執行,而隻能在指令行下執行python 1.pyc才可以。這對使用來說很不友善。于是想到了Windows下的批處理檔案,就在pyc檔案的目錄__pycache__裡建立了一個runit.bat檔案:

@echo off
python 1.pyc      

輕按兩下runit.bat,果然執行成功了。

事情到這裡似乎已經解決,但是果然沒有其他辦法輕按兩下執行pyc檔案了嗎?又在網上查了其它資料,有人說可以更改windows檔案擴充名的關聯,進而執行某一段指令。在cmd中運作這個指令

assoc | findstr /R /C:"pyc"      

可以發現這一段資訊:

.pyc=Python.CompiledFile      
Python.CompiledFile="C:\Python34\Python.exe" "%1" %*