1. 怎樣將python生成exe
Python是一個腳本語言,被解釋器解釋執行。它的發布方式:
.py文件:對於開源項目或者源碼沒那麼重要的,直接提供源碼,需要使用者自行安裝Python並且安裝依賴的各種庫。(Python官方的各種安裝包就是這樣做的)
.pyc文件:有些公司或個人因為機密或者各種原因,不願意源碼被運行者看到,可以使用pyc文件發布,pyc文件是Python解釋器可以識別的二進制碼,故發布後也是跨平台的,需要使用者安裝相應版本的Python和依賴庫。
可執行文件:對於非碼農用戶或者一些小白用戶,你讓他裝個Python同時還要折騰一堆依賴庫,那簡直是個災難。對於此類用戶,最簡單的方式就是提供一個可執行文件,只需要把用法告訴Ta即可。比較麻煩的是需要針對不同平台需要打包不同的可執行文件(Windows,Linux,Mac,...)。
本文主要就是介紹最後一種方式,.py和.pyc都比較簡單,Python本身就可以搞定。將Python腳本打包成可執行文件有多種方式,本文重點介紹PyInstaller,
PyInstaller的原理簡介
PyInstaller其實就是把python解析器和你自己的腳本打包成一個可執行的文件,和編譯成真正的機器碼完全是兩回事,所以千萬不要指望成打包成一個可執行文件會提高運行效率,相反可能會降低運行效率,好處就是在運行者的機器上不用安裝python和你的腳本依賴的庫。在Linux操作系統下,它主要用的binutil工具包裡面的ldd和objmp命令。
PyInstaller輸入你指定的的腳本,首先分析腳本所依賴的其他腳本,然後去查找,復制,把所有相關的腳本收集起來,包括Python解析器,然後把這些文件放在一個目錄下,或者打包進一個可執行文件裡面。
可以直接發布輸出的整個文件夾裡面的文件,或者生成的可執行文件。你只需要告訴用戶,你的應用App是自我包含的,不需要安裝其他包,或某個版本的Python,就可以直接運行了。
需要注意的是,PyInstaller打包的執行文件,只能在和打包機器系統同樣的環境下。也就是說,不具備可移植性,若需要在不同系統上運行,就必須針對該平台進行打包。
pyinstaller將Python腳本打包成可執行程序,使在沒有Python環境的機器上運行
最新版是pyinstaller 3.1.1。支持python2.7和python3.3+。
可運行在Windows,Mac和Linux操作系統下。
但它不是跨編譯的,也就是說在Windows下用PyInstaller生成的exe只能運行在Windows下,在Linux下生成的只能運行在Linux下。
pyinstaller在windows下的安裝
使用命令pip install pyinstaller即可
在windows下,pyinstaller需要PyWin32的支持。當用pip安裝pyinstaller時未找到PyWin32,會自動安裝pypiwin32。
打包
打包的app里並不包含任何源碼,但將腳本的.pyc文件打包了。
基本語法:
pyinstaller options myscript.py
常用的可選參數如下:
--onefile 將結果打包成一個可執行文件
--onedir 將所有結果打包到一個文件夾中,該文件夾包括一個可執行文件和可執行文件執行時需要的依賴文件(默認)
--paths=DIR 設置導入路徑
--distpath=DIR 設置將打包的結果文件放置的路徑
--specpath=DIR 設置將spec文件放置的路徑
--windowed 使用windows子系統執行,不會打開命令行(只對windows有效)
--nowindowed 使用控制檯子系統執行(默認)(只對windows有效)
--icon=<FILE.ICO> 將file.ico添加為可執行文件的資源(只對windows有效)
2. Python中生成器的理解
9.10. 生成器
Generator 是創建迭代器的簡單而強大的工具。它們寫起來就像是正規的函數,需要返回數據的時候使用 yield 語句。每次 next() 被調用時,生成器回復它脫離的位置(它記憶語句最後一次執行的位置和所有的數據值)。以下示例演示了生成器可以很簡單的創建出來:
前一節中描述了基於類的迭代器,它能作的每一件事生成器也能作到。因為自動創建了 __iter__() 和 __next__() 方法,生成器顯得如此簡潔。
另一個關鍵的功能在於兩次執行之間,局部變數和執行狀態都自動的保存下來。這使函數很容易寫,而且比使用 self.index 和 self.data 之類的方式更清晰。
除了創建和保存程序狀態的自動方法,當發生器終結時,還會自動拋出 StopIteration 異常。綜上所述,這些功能使得編寫一個正規函數成為創建迭代器的最簡單方法。
Generator 是創建迭代器的簡單而強大的工具。它們寫起來就像是正規的函數,需要返回數據的時候使用 yield 語句。每次 next() 被調用時,生成器回復它脫離的位置(它記憶語句最後一次執行的位置和所有的數據值)。以下示例演示了生成器可以很簡單的創建出來:
前一節中描述了基於類的迭代器,它能作的每一件事生成器也能作到。因為自動創建了 __iter__() 和 __next__() 方法,生成器顯得如此簡潔。
另一個關鍵的功能在於兩次執行之間,局部變數和執行狀態都自動的保存下來。這使函數很容易寫,而且比使用 self.index 和 self.data 之類的方式更清晰。
除了創建和保存程序狀態的自動方法,當發生器終結時,還會自動拋出 StopIteration 異常。綜上所述,這些功能使得編寫一個正規函數成為創建迭代器的最簡單方法。
3. python 生成的exe 怎麼運行
Python是一種簡單而強大的編程語言,適用於編寫腳本,甚至於應用程序的開發。Python可用的各種GUI包使得利用Python編寫全功能的應用變為可能。這很好,但你有沒有想過將你編寫的Python腳本轉化為可執行文件?這似乎是一個很贊的主意,有許多原因!你可以在沒有Python解釋器的情況下重新部署你的應用。終端用戶不需要在他的機器上安裝Python。你可以將你的應用閉源(很不幸)等等……這篇文章可以告訴你如何從你的Python腳本生成win32可執行文件。
Python is a simple and powerful language for scripting and even application development. Various GUI packages available for Python makes it suitable for developing full fledged applications in python. Ok that is fine, but ever thought of creating an executable file from the python script you wrote? This seems to be a nice idea, there are many reasons why! You can redistribute your application without python. The end user needn't to install python on his machine. You can make your application closed source (unfortunate) etc... Read on this article to find how you can create win32 executables from your Python script.
This tutorial will give step by step instruction on how to create Win32 executable from Python script. Make sure that the following are installed on your system.
這篇教程將會一步一步的介紹如何從Python腳本創建Win32可執行文件。請確保你的系統里已經安裝了下面的程序。
Python. Get Python fromh and install on your machine.
py2exe. Get py2exe from 下載時注意安裝的Python版本。
命令行程序
下面的示例代碼會在命令行里列印一行標題,以及從1到10的數字。
test.py
print "Python script to exe test program"count = 0while count < 10:print "count = " + str(count) +"
"count = count + 1123456
把這段代碼保存在test.py(或者別的以.py為後綴的)文件中。用Python解釋器首先測試並成功運行這段代碼。要完成這一步,只需要在命令行里輸入「python test.py」。你應當在命令行里看到下面的輸出。
目前為止一切順利。現在讓我們看看我們怎樣從腳本構建windows可執行程序。創建一個新文件命名為setup.py並將下面的代碼粘貼進去。
setup.py
from distutils.core import setupimport py2exe
setup(console=['gui.py'])123
構建可執行文件時,在命令提示符里運行「python setup.py py2exe」。一旦構建過程完成,移動到dist子目錄下並通過在命令行里鍵入「gui.exe」來運行這個可執行文件。現在你應該看到與前面用Python腳本創建的一樣的窗體。
4. python 怎麼生成
如果你對在Python生成隨機數與random模塊中最常用的幾個函數的關系與不懂之處,下面的文章就是對Python生成隨機數與random模塊中最常用的幾個函數的關系,希望你會有所收獲,以下就是這篇文章的介紹。
random.random()用於生成
用於生成一個指定范圍內的隨機符點數,兩個參數其中一個是上限,一個是下限。如果a > b,則生成隨機數
n: a <= n <= b。如果 a <b, 則 b <= n <= a。
print random.uniform(10, 20)
print random.uniform(20, 10)
#----
#18.7356606526
#12.5798298022
random.randint
用於生成一個指定范圍內的整數。其中參數a是下限,參數b是上限,Python生成隨機數
print random.randint(12, 20) #生成的隨機數n: 12 <= n <= 20
print random.randint(20, 20) #結果永遠是20
#print random.randint(20, 10) #該語句是錯誤的。
下限必須小於上限。
random.randrange
從指定范圍內,按指定基數遞增的集合中 ,這篇文章就是對python生成隨機數的應用程序的部分介紹。
隨機整數:
>>> import random
>>> random.randint(0,99)
21
隨機選取0到100間的偶數:
>>> import random
>>> random.randrange(0, 101, 2)
42
隨機浮點數:
>>> import random
>>> random.random()
0.85415370477785668
>>> random.uniform(1, 10)
5.4221167969800881
隨機字元:
>>> import random
>>> random.choice('abcdefg%^*f')
'd'
多個字元中選取特定數量的字元:
>>> import random
random.sample('abcdefghij',3)
['a', 'd', 'b']
多個字元中選取特定數量的字元組成新字元串:
>>> import random
>>> import string
>>> string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).r
eplace(" ","")
'fih'
隨機選取字元串:
>>> import random
>>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )
'lemon'
洗牌:
>>> import random
>>> items = [1, 2, 3, 4, 5, 6]
>>> random.shuffle(items)
>>> items
[3, 2, 5, 6, 4, 1]
5. Python創建生成器的兩種方法
創建生成器方法
方法一
要創建一個生成器,有很多種方法。第一種方法很簡單,只要把一個列表生成式的[ ]改成( )
創建L和G的區別僅在於最外層的[ ]和( ),L是一個列表,而G是一個生成器。我們可以直接列印出L的每一個元素,但我們怎麼列印出G的每一個元素呢?如果要一個一個列印出來,可以通過next()函數獲得生成器的下一個返回值:
運行結果:
運行結果:
生成器保存的是演算法,每次調用next(G),就計算出G的下一個元素的值,直到計算到最後一個元素,沒有更多的元素時,拋出StopIteration的異常。當然,這種不斷調用next()實在是太變態了,正確的方法是使用for循環,因為生成器也是可迭代對象。所以,我們創建了一個生成器後,基本上永遠不會調用next(),而是通過for循環來迭代它,並且不需要關心StopIteration異常。
相關推薦:《Python視頻教程》
方法2
generator非常強大。如果推算的演算法比較復雜,用類似列表生成式的for循環無法實現的時候,還可以用函數來實現。
比如,著名的斐波拉契數列(Fibonacci),除第一個和第二個數外,任意一個數都可由前兩個數相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34, ...
斐波拉契數列用列表生成式寫不出來,但是,用函數把它列印出來卻很容易:
運行結果:
仔細觀察,可以看出,fib函數實際上是定義了斐波拉契數列的推算規則,可以從第一個元素開始,推算出後續任意的元素,這種邏輯其實非常類似generator。
也就是說,上面的函數和generator僅一步之遙。要把fib函數變成generator,只需要把print(b)改為yield b就可以了:
運行結果:
在上面fib的例子,我們在循環過程中不斷調用yield,就會不斷中斷。當然要給循環設置一個條件來退出循環,不然就會產生一個無限數列出來。同樣的,把函數改成generator後,我們基本上從來不會用next()來獲取下一個返回值,而是直接使用for循環來迭代:
運行結果:
但是用for循環調用generator時,發現拿不到generator的return語句的返回值。如果想要拿到返回值,必須捕獲StopIteration錯誤,返回值包含在StopIteration的value中:
運行結果:
相關推薦:
三分鍾看懂什麼是Python生成器
6. python中生成隨機整數
python 中有生成0-1以內隨機數的函數random.random(),然後乘以一個倍數,再取整int就可以了。
7. 如何打包python文件生成exe
下載pyinstaller包,使用這個包將python項目打包成exe文件,但是生成的exe文件會非常大,部署起來可能會出現一些問題。
8. python如何生成詞雲圖
from wordcloud import WordCloud
import jieba
import numpy
import PIL.Image as Image
#1.將字元串切分
def chinese_jieba(text):
wordlist_jieba=jieba.cut(text)
space_wordlist=" ".join(wordlist_jieba)
return space_wordlist
with open("test.txt" ,encoding="utf-8")as file:
text=file.read()
text=chinese_jieba(text)
#2.圖片遮罩層
mask_pic=numpy.array(Image.open("china.jpg"))
#3.將參數mask設值為:mask_pic
wordcloud = WordCloud(font_path="C:/Windows/Fonts/simfang.ttf",mask=mask_pic).generate(text)
image=wordcloud.to_image()
image.show()
如圖所示
9. python自動生成工作周報怎麼做
摘要 親,你好!代碼如下:
10. python列表生成式在哪裡
把要生成的元素放在前面,後面跟上for循環
如:【x+10 for x in range(15)】
生成器可以理解為用於生成列表、元組等可迭代對象的機器。既然是機器,沒啟動之前,在Python中只是一個符號。也就是說,生成器還不是實際意義上的列表,因此比列表更加節省內存空間,必要時,生成器可以按照需要去生成列表。
解釋
生成器也是一種迭代器,但是你只能對其迭代一次。這是因為它們並沒有把所有的值存在內存中,而是在運行時生成值。你通過遍歷來使用它們,要麼用一個「for」循環,要麼將它們傳遞給任意可以進行迭代的函數和結構。大多數時候生成器是以函數來實現的。然而,它們並不返回一個值,而是yield(暫且譯作「生出」)一個值。