㈠ Cpython是什麼PyPy是什麼Python和這兩個東西有什麼關系
CPython:是用C語言實現Pyhon,是目前應用最廣泛的解釋器。最新的語言特性都是在這個上面先實現,基本包含了所有第三方庫支持,但是CPython有幾個缺陷,一是全局鎖使Python在多線程效能上表現不佳,二是CPython無法支持JIT(即時編譯),導致其執行速度不及java和Javascipt等語言。於是出現了Pypy。
Pypy:是用Python自身實現的解釋器。針對CPython的缺點進行了各方面的改良,性能得到很大的提升。最重要的一點就是Pypy集成了JIT。但是,Pypy無法支持官方的C/Python API,導致無法使用例如Numpy,Scipy等重要的第三方庫。這也是現在Pypy沒有被廣泛使用的原因吧。
而PyPy與CPython的不同在於,別的一些python實現如CPython是使用解釋執行的方式,這樣的實現方式在性能上是很凄慘的。而PyPy使用了JIT(即時編譯)技術,在性能上得到了提升。
㈡ linux下怎麼編譯python
1. 下載python2.7.5,保存到 /data/qtongmon/software
http://www.python.org/ftp/python/
2. 解壓文件
tar xvf Python-2.7.5.tar.bz2
3. 創建安裝目錄
mkdir /usr/local/python27
4. 安裝python
./configure --prefix=/usr/local/python27
make
make install
5. 修改老版本的ln指向(注意:這里修改後,可能會影響yum的使用)
mv /usr/bin/python /usr/bin/python2.4.3
ln -s /usr/local/python27/bin/python /usr/bin/python
㈢ 一堆python的源碼,怎樣編譯成一個程序
例如有3個文件 main.cpp func.h func.cpp 你要別的程序用的函數和變數都要放在 func.h 中。 main.cpp: #include "func.h" main() { myvalue = myfunc(); } func.h #ifndef FUNCH // 避免重復定義,一定要有! #define FUNCH long myfunc(); // 讓別的cpp使用函數 extern long myvalue; // 讓別的cpp使用變數 #endif func.cpp long myvalue; long myfunc() { return 10; } 用上面的方法,你有隨便多少個cpp都沒有問題。 當然要保證你用的cpp和h已經加入工程了。 好的習慣是將類似的函數放在同一個cpp, 每個類 用自己的cpp.
㈣ 我在按書上編譯python 源碼時,老是提示錯誤,雖然輸入正確,編譯不成功(eclisp工具)
我復制你的代碼運行了一遍,沒問題啊。
filemunu=wx.Menu()
filemenu.Append(wx.ID_ABOUT, "&About"," Information about this program")
看來沒問題的是源代碼,你自己寫的還是有問題,filemenu都沒有定義,為什麼呢,因為你定義的是filemunu而不是filemenu。。。。。。
㈤ 使用python語言如何保密源代碼以防止逆向工程
大家都很忙,誰有時間看你的的爛代碼!
如果真的怕泄露,別用python.
我以前做過這類事情,而且當時更嚴格,需要打包部署到客戶的服務只在有效期內有效,超過有效期必須更新證書才行。
Python代碼用任何方法都沒法保證保密性,這個時候你可以考慮用一個工具「nuitka」,這個工具會把你的python源代碼映射為c++然後編譯為二進制,因此對方是無論如何得不到你的源代碼的。
代價就是nuitka這個工具並不完美,有一些限制並不能100%完美的轉換所有python代碼。
1.用Cython編譯python成 Windows的pyd文件或Linux的so文件,二進制文件相對安全性較高。
2.用源碼混淆器把代碼搞的又臭又長。。。混淆完了再用Cython編譯為二進制。。。這樣靜態反編譯逆向難度也不小。
3.同其他語言程序一樣,可以對調試狀態進行檢測,當處於調試狀態時退出程序或進入混亂代碼耗費逆向工程人員心神。
4.分享一個跨平台反調試手段,檢測函數運行時間,加斷點會導致函數運行時間變長,也可感知正在被調試。
Python是提倡開源的,既然選擇Python還是擁抱開源才好~ 都開源還擔心逆向工程嘛
沒有不能逆的軟體。
只要匯編語言過關,逆向工程都是可以實現的,不要有其它想法。
你唯一可以做的,就是不讓別人用python讀取源代碼而已。那樣實現起來比較簡單。
python 適合開發伺服器程序,或者自己科研使用的程序,如果是 作為用戶程序,安裝到 pc 或手機上,還是 其它 c++ 或java 比較合適
1)可以把需要保護的部分用c語言實現,從而編譯成so等文件,這樣逆向的成本會比較高,可以防止直接打開python文件看到代碼邏輯。
2)so文件通過ida等工具也是可以反匯編的,可以通過對c語言進行代碼混淆,花指令等操作,提高通過ida等反匯編工具的分析難度。
3)不存在絕對無法逆向的技術手段,因此只能是看具體需求,選擇具體的防逆向的技術手段。
有工具類似py2exe轉成可執行程序,隱藏全部源代碼,雖然bytecode還是可以反編譯,但是難度大多了
1. 最穩的就是你改cpython載入代碼的過程,改zip包讀取最穩。
2. 藉助一些加密工具在編譯pyc之前進行一定的混淆,可以防君子,自我安慰一下。
商用一般都是用第一種辦法,小打小鬧用第二種。
可以考慮使用pymod工具,使用pymod pack 將模塊加密打包,發布的時候一個模塊就一個文件。
先睹為快,看看一個項目發布的時候,只有幾個文件,
main.py 項目程序入口
setting.py 項目配置
apps 項目模塊
plusins 項目插件目錄
創建項目 pymod create demo1
cd demo1
創建模塊 pymod add mod1
啟動pycharm 開始編寫功能模塊
一個模塊默認由三個文件組成
__init__.py 、 handlers.py 、param_schemas.py
業務邏輯主要在handlers.py中編寫
__init__.py
from pymod.blueprint import Blueprint api = Blueprint("/mod1") from .handlers import *
param_schemas.py
schema_sfz = { "type": "object", "required": ["sfz", "nl"], "properties": { "sfz": { "type": "string", "minLength": 18, "maxLength": 18, "description": "身份證明號碼" }, "nl": { "type": "integer", "minimum": 0, "maximum": 150, "description": "年齡" } } }
handlers.py
from . import api from pymod.ext import RequestHandler, params_validate,TrueResponse,FalseResponse from .param_schemas import schema_sfz from pymod.plugins import sfz_check @api.add_route('/hello') class Hello(RequestHandler): def get(self): self.write('Hello World') @params_validate(schema_sfz) def post(self): sfz = self.get_json_arg("sfz") nl =self.get_json_arg("nl") # self.write(TrueResponse(sfz=sfz, nl=nl)) if sfz_check.check_sfzmhm(sfz): self.write(TrueResponse(hint="身份證明號碼驗證通過")) else: self.write(FalseResponse(hint="身份證明號碼驗證失敗"))
三、項目部署
程序調試 修改setting.py
# 開發模式下 運行的模塊名稱必須填寫
moles = ["mod1"] moles_config ={ "mod1": { "deny_ip": "", "allow_ip": "*" } }
啟動程序 python main.py
調試沒有問題,進入發布模式
在項目目錄下
pymod pack mod1
在target目錄下生成mod1.mod文件,將其復制到apps目錄中
修改setting.py
# 開發模式下 運行的模塊名稱必須填寫
moles = []
再次運行 python main.py 測試
一切OK,系統就可以發布了。
說不能保密的,是沒有研究過python的機制的。我做個一個項目,所有源代碼自定義加密,運行時解密。
㈥ Python源碼是什麼意思
源代碼是指原始代碼,可以是任何語言代碼。Python源碼就是指編寫的最原始程序的代碼。運行的軟體是要經過編寫的,程序員編寫程序的過程中需要他們的「語言」。
㈦ python 反編譯 源碼還原py後,怎麼把它再編譯成pyc
不用編譯
Python每次執行的時候,都會檢查py是否有同名的pyc
如果沒有或者pyc比py生成時間更早,就會自動把py翻譯成位元組碼的pyc
然後由pyc解釋執行
㈧ python的源代碼在文本文檔里編譯可以不可以的話如何修改格式什麼的求助謝謝!
python是解釋型語言,不需要編譯,通過python解釋器直接運行就行。源代碼的後綴是.py,如果代碼第一行有#!,則直接輸入文件名字即可運行,如果沒有,需要用[python filename]語句來運行。如果你的電腦是windows,需要下載安裝python解釋器,或IDE,具體的可到官網下載。我使用的是Mac,python是直接安裝好的,在terminate下跑就行。
㈨ 如何靜態編譯構建 Python
編寫的話,拿什麼編輯器編寫都可以。
如果是編譯亂正磨的話,python是不需要編譯的,直接運行即可。
運行的話,你需要安裝一個python的解釋器,可以是官方python,actiePython或者其他版本的python。
然後你可以選擇python自帶的IDLE編寫,也可以在命令行下輸入清鉛python進入交互shell進行編寫,當然也可以用支持python語言的IDE進嘩斗行編寫。