導航:首頁 > 源碼編譯 > python執行會預編譯

python執行會預編譯

發布時間:2023-01-06 03:37:37

Ⅰ 請教可以查看python解釋器版本號或者安裝路徑命令

Python是解釋型腳本語言,在執行時,逐句解釋執行,不需要進行預編譯。但需要有自身的Python解釋器。
所以在執行Python代碼時,需要指定python解釋器。
指定解釋器方法:
在文件開頭添加搜索路徑,
linux OS
中一般安裝後的默認路徑如下
#!/usr/bin/env python 或者#!/usr/locat/bin/python

如果沒有找到,可以通過命令查詢python路徑
whereis python或者
which python

Windows OS
可以通過以下方式查詢python路徑或者第三方模塊安裝路徑。
>>> import sys
>>> sys.path['C:\\Users\\zx\\Desktop', 'C:\\Users\\zx\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages']

cmd目錄下運行python -V可查看python版本
修改默認python版本
先查看安裝的python路徑:
justin18chan@justin18chan:~$ whereis python
python: /usr/bin/python /usr/bin/python3.5 /usr/bin/python2.7-config /usr/bin/python3.5m /usr/bin/python2.7 /usr/lib/python3.5 /usr/lib/python2.7 /etc/python /etc/python3.5 /etc/python2.7 /usr/local/bin/python3.6m-config /usr/local/bin/python3.6-config /usr/local/bin/python3.6m /usr/local/bin/python3.6 /usr/local/lib/python3.5 /usr/local/lib/python3.6 /usr/local/lib/python2.7 /usr/include/python3.5m /usr/include/python2.7 /usr/share/python /usr/share/man/man1/python.1.gz

使用ln -s命令來修改,命令如下:
justin18chan@justin18chan:~$ sudo rm /usr/bin/python
[sudo] password for justin18chan: justin18chan@justin18chan:~$ sudo ln -s /usr/bin/python3.5 /usr/bin/python
justin18chan@justin18chan:~$ pythonPython 3.5.2 (default, Sep 14 2017, 22:51:06)

Ⅱ 為什麼編譯的Python模塊,但不是腳本正在運行

文件是在導入編譯。 這不是一個安全的事情。 這僅僅是如果你將其導入蟒蛇保存輸出。 看到這個帖子由Fredrik Lundh開發上Effbot。

>>>import main
# main.pyc is created

當運行一個腳本巨蟒將不使用* .pyc文件的文件。 如果你有你想要你的腳本一些其他的原因,預編譯可以使用compileall模塊。

python -m compileall .

compileall用法

python -m compileall --help
option --help not recognized
usage: python compileall.py [-l] [-f] [-q] [-d destdir] [-x regexp] [directory ...]
-l: don't recurse down
-f: force rebuild even if timestamps are up-to-date
-q: quiet operation
-d destdir: purported directory name for error messages
if no directory arguments, -l sys.path is assumed
-x regexp: skip files matching the regular expression regexp
the regexp is searched for in the full path of the file

回答以下問題編輯

Ⅲ python項目代碼變更後一定要重新編譯嗎

一般的時候,你直接用py文件執行就可以了,python會自動編譯一些必要的文件。
另外目前py不同的位元組碼是變動的,也就是說不同版本的位元組碼還是不兼容,做不動一次編譯到處執行。
如果你現在三個文件 main.py, a.py, b.py
其中main是入口,而且在main中有import a.py 和import b.py
那麼只會生成a.pyc,b.pyc,而不會生成main.pyc
出發你自己用python中的compile命令編譯main.py
以上

Ⅳ python是什麼樣的編程語言

編程語言主要從以下幾個角度為進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每個分類代表什麼意思呢,我們一起來看一下。

2.1 編譯型與解釋型。

編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;

而解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的.

這是因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進制的形式)

編譯型

優點:編譯器一般會有預編譯的過程對代碼進行優化。因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程序執行效率高。可以脫離語言環境獨立運行。

缺點:編譯之後如果需要修改就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據運行的操作系統環境編

解釋型

優點:有良好的平台兼容性,在任何環境中都可以運行,前提是安裝了解釋器(虛擬機)。靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。

缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。

2.2動態語言和靜態語言

通常我們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。

(1)動態類型語言:動態類型語言是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變數指定數據類型,該語言會在你第一次賦值給變數時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬於動態類型語言。

(2)靜態類型語言:靜態類型語言與動態類型語言剛好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明所有變數的數據類型,C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#、java等。

2.3強類型定義語言和弱類型定義語言

(1)強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變數被指定了某個數據類型,如果不經過強制轉換,那麼它就永遠是這個數據類型了。舉個例子:如果你定義了一個整型變數a,那麼程序根本不可能將a當作字元串類型處理。強類型定義語言是類型安全的語言。

(2)弱類型定義語言:數據類型可以被忽略的語言。它與強類型定義語言相反, 一個變數可以賦不同數據類型的值。

強類型定義語言在速度上可能略遜色於弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外,"這門語言是不是動態語言」與"這門語言是否類型安全」之間是完全沒有聯系的!

例如:Python是動態語言,是強類型定義語言(類型安全的語言); VBScript是動態語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態語言,是強類型定義語言(類型安全的語言)。

通過上面這些介紹,我們可以得出,python是一門動態解釋性的強類型定義語言。

Ⅳ Java,Python分別是解釋型還是編譯型語言

Java,Python都是解釋型的,但是java會做一個語法檢查的預編譯,執行的時候才解釋成機器語言。
C、C++才是編譯型的
解釋型的通用性好,可以跨平台
編譯型的效率高。

Ⅵ python 有沒有預編譯文本

1.簡介
相對於py文件來說,編譯成pyc和pyo本質上和py沒有太大區別,只是對於這個模塊的載入速度提高了,並沒有提高代碼的執行速度,通常情況下不用主動去編譯pyc文件,除非需要商業提供,防止源代碼泄露。
(1)什麼是pyc文件
pyc是一種二進制文件,是由py文件經過編譯後,生成的文件,是一種byte code,py文件變成pyc文件後,載入的速度有所提高,而且pyc是一種跨平台的位元組碼,是由Python的虛擬機來執行的,這個是類似於Java虛擬機的概念。pyc的內容,是跟python的版本相關的,不同版本編譯後的pyc文件是不同的,2.5編譯的pyc文件,2.4版本的python是無法執行的。
(2)什麼是pyo文件
pyo是優化編譯後的程序 python -O 源文件即可將源程序編譯為pyo文件
把需要的模塊編譯成pyo文件可以減少容量

2.反編譯
將python文件編譯為pyc文件(使用compileall 命令),再刪除源代碼。
(該文件類似於java中的class文件,但是我們使用的2.7版本的python,目前沒有
免費版的反編譯工具,所以目前要破解不是很容易,所以可以不必再做混淆)

(1)命令行編譯方法:
python -m compileall src/
echo compile finished...
rm -rf src/*.py

編譯成pyo的話:
就是在控制台執行 python -O -m py_compile file.py

(2)python程序編譯方法:
如果需要特殊的單獨編譯,則只需要使用py_complie這個模塊就行了,如下
import py_compile
py_compile.compile(r'H:\game\test.py')

反編譯工具:
1.uncompyle2 只能編譯2.7

反編譯Demo代碼:

import os
import sys

def displayFile(file):
unPath= sys.executable
unPath=unPath[ 0 : unPath.rfind( os.sep ) ]
newname = file[0:file.rfind('.')] + '.py'
command = "python -u "+unPath+"\scripts\uncompyle2 " + file + ">" + newname
try:
os.system(command)
except e:
print file

if __name__ == '__main__':

#print unPath
print 'init'
displayFile('E:\\test.pyc')
print 'finished'

2.zrax/pycdc 可以編譯3.0

Ⅶ python代碼運行需要編譯嗎

有人在討論 Python 代碼是編譯執行還是解釋執行?這個問題還可以換一種說法: Python 是編譯型語言還是解釋型語言?回答這個問題

前,我們先弄清楚什麼是編譯型語言,什麼是解釋型語言。

所謂編譯執行就是源代碼經過編譯器編譯處理,生成目標機器碼,就是機器能直接運行的二進制代碼,下次運行時無需重新編譯。不過它

是針對特定CPU體系的,這些目標代碼只能在特定平台執行,如果這個程序需要在另外一種 CPU 上面運行,這個代碼就必須重新編譯。

它不具備可移植性,但是執行速度快,C、C++這類語言屬於編譯型語言。

而解釋型語言是在代碼運行期間逐行翻譯成目標機器碼,下次執行時,還是需要逐行解釋,我們可以簡單認為 Java、Python 都是解釋型

語言。

編譯型相當於廚師直接做好一桌子菜,顧客來了直接開吃,而解釋型就像吃火鍋,廚師把菜洗好,顧客需要自己動手邊煮邊吃,效率上來

說解釋型語言自然比不過編譯型語言,當然也不是絕對了,像 JIT 的效率就很高

以上是對編譯型語言和解釋型語言的一個簡單粗暴的區分,但是 Python(這里主要是指CPython)並不是嚴格的解釋型語言,因為

Python 代碼在運行前,會先編譯(翻譯)成中間代碼,每個 .py 文件將被換轉成 .pyc 文件,.pyc 就是一種位元組碼文件,它是與平台無

關的中間代碼,不管你放在 Windows 還是 Linux 平台都可以執行,運行時將由虛擬機逐行把位元組碼翻譯成目標代碼。

我們安裝Python 時候,會有一個 Python.exe 文件,它就是 Python 解釋器,你寫的每一行 Python 代碼都是由它負責執行,解釋器由

一個編譯器和一個虛擬機構成,編譯器負責將源代碼轉換成位元組碼文件,而虛擬機負責執行位元組碼,所以,解釋型語言其實也有編譯過

程,只不過這個編譯過程並不是直接生成目標代碼,而是中間代碼(位元組碼),然後再通過虛擬機來逐行解釋執行位元組碼。

總結

Python代碼首先會編程一個位元組碼文件,再由虛擬機逐行解釋,把每一行位元組碼代碼翻譯成目標指令給CPU執行。

推薦學習《Python教程》。

Ⅷ Python代碼是編譯執行還是解釋執行

PYTHON是一種解釋型的腳本語言,所以是解釋執行的

閱讀全文

與python執行會預編譯相關的資料

熱點內容
燒錄編程器那個好用 瀏覽:542
三晉先鋒app如何簽約 瀏覽:439
網路如何讀取伺服器信息 瀏覽:434
mac壓縮解壓視頻 瀏覽:906
這就是程序員魅力 瀏覽:296
京東java演算法筆試題 瀏覽:178
柱子加密箍筋不準有接頭 瀏覽:199
我的世界伺服器菜單插件如何使用 瀏覽:12
劉毅10000詞pdf 瀏覽:890
剛畢業的程序員會什麼 瀏覽:974
單片機控制64路開關量 瀏覽:982
win10截圖編程 瀏覽:420
怎樣把名字變成文件夾 瀏覽:203
文件怎麼搞成文件夾 瀏覽:730
多線程編程php 瀏覽:606
安卓機越用越卡有什麼辦法 瀏覽:17
高中生解壓操場適合做的游戲 瀏覽:395
程序員java招聘 瀏覽:462
未來之光手機雲伺服器 瀏覽:160
伺服器下載資料為什麼c盤滿了 瀏覽:265