python依賴打包
Ⅰ python怎麼打包整個項目
distutils - Python自帶的基本安裝工具, 適用於非常簡單的應用場景使用, 不支持依賴包的安裝
通過distutils來打包,生成安裝包,安裝python包等工作,需要編寫名為setup.py python腳本文件。
setuptools - 針對 distutils 做了大量擴展, 尤其是加入了包依賴機制。不支持python3,安裝完setuptools後會有easy_install
distribute - 類似於setuptools,支持python3,安裝完distribute後會有easy_install。
easy_install - setuptools 和 distribute 自帶的安裝腳本, 也就是一旦setuptools或distribute安裝完畢, easy_install 也便可用了。
pip - 目標是取代easy_install。easy_install 有很多不足: 安裝事務是非原子操作, 只支持 svn, 沒有提供卸載命令, 安裝一系列包時需要寫
腳本; pip 解決了以上問題, 已儼然成為新的事實標准, virtualenv 與它已經成為一對好搭檔;
distutils2 - setuptools 和 distribute 的誕生是因為 distutils 的不濟, 進而導致目前分化的狀況。它將成為 Python 3.3 的標准庫
packaging , 並在其它版本中以distutils2 的身份出現; 換句話說, 它和 pip 將聯手結束目前混亂的狀況。
virtualenv - 用來創建隔離的python環境,處理python環境的多版本和模塊依賴。
常識
sudo apt-get install 安裝的package存放在 /usr/lib/python2.7/dist-packages目錄中
pip 或者 easy_install安裝的package存放在/usr/local/lib/python2.7/dist-packages目錄中
手動從源代碼安裝的package存放在site-packages目錄中。
更多學習內容,請點擊Python學習網!
Ⅱ 如何將python文件打包成exe文件
1.需要安裝 py2exe
2.示例代碼:
#exetest.py#創建一個gui界面,只用一個標簽和按鈕,無功能from Tkinter import *win = Tk()
label = Label(win,text = 'hello')
btn = Button(win,text = 'click')
label.pack()
btn.pack()
win.mainloop()
3.配置代碼:
#exeset.pyfrom distutils.core import setupimport py2exe
setup(console=["exetest.py"]) #運行的時候會有CMD窗口#或者setup(windows=["exetest.py"]) 運行的時候只有GUI
4.執行轉換
首先定位到文件目錄,然後運行CMD
python exeset.py py2exe
執行完畢之後會在該目錄中生成一個文件夾dist,裡面是生成的exe程序和相關依賴
5.使用pyinstaller
感覺pyinstaller比py2exe更好用,下載pyinstaller後解壓就好,然後把一個demo.py復制到目錄下,定位到位置後輸入命令:
python pyinstaller.py --onefile --windowed --icon=path\x.ico demo.py
其中 --onefile 表示只生成一個.exe文件,相關依賴都打包了, --windowed 表示生成的是GUI,否則是帶命令窗口的, --icon 是設置.exe的圖標。這些都是可選項。
Ⅲ 如何將python程序打包為exe
用pyinstaller,很容易就能實現,步驟如下:
下載pyinstaller包,(我可以安裝包發給你),把pyinstaller解壓到任意路徑後
1.開始->運行->cmd->回車
2.把路徑改為pyinstaller所在的路徑。比如pyinstaller在D盤,則輸入「D:」(不包括「下同)回車,再輸入」cd pyinstaller」回車
3.把你要打包的.py文件和執行文件所需要的文件復制到你解壓的文件夾中(假如你要打包hello.py)
4.輸入「Configure.py」回車
5.輸入「Makespec.py hello.py」回車,正確的話會產生一個hello文件夾,把這個文件夾你的hello.spec文件復制到跟hello.py一個目錄里
6.輸入「Build.py hello.spec」回車,正確執行後會在當前目錄產生幾個文件夾,在dist文件夾里的東西就是我們所需要的,最後記得把所有程序hello.py所需的文件拷到dist文件夾里。
Ⅳ 如何將一個python工程打包成一個庫
安裝完pyinstaller之後就可以開始了。
1.使用pyinstaller生成可執行文件的方法
1.1 將依賴文件集中到一個文件夾:
pyinstaller -D -w main.py #把main.py替換成你的主入口python文件即可。
-w參數代表main.py是一個窗體程序。
1.2 將所有依賴文件都打包到同一個可執行文件中:
pyinstaller -F -w main.py
2.調查pyinstaller生成程序的載入過程
使用如下命令,可以得到運行時的跟蹤,tracing ,loader 的載入過程。
pyinstaller -Fwd aui.py #把aui.py 換成你需要偵測的文件即可。
Ⅳ 包含多個文件夾的Python項目打包為可執行文件exe
block_cipher = None
a = Analysis(['main.py', 'monitor.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\caption_recognizer.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\image_recognizer.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\image_vectorizer.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\network2.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\test_fun.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\unicom_area.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\unicom_area_finder.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\unicom_area_include_caption_judger.py',
'E:\\py_project\\test_wpf_python_msg\\src\\recognition_mole\\value_vectorizer.py'],
pathex=['E:\\py_project\\test_wpf_python_msg'],
binaries=[],
datas=[('E:\\py_project\\test_wpf_python_msg\\images', 'images'),
('E:\\py_project\\test_wpf_python_msg\\network_parameters', 'network_parameters')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='main',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='main')
(1)第一個列表中寫所有的py文件,與main一個文件夾的可以直接寫文件名,不一個文件夾的需要寫完整的文件路徑。
我曾試過在pathex中加入其他文件的路徑,然後其他py文件不寫完整路徑,只寫文件名,但是失敗了。
(2)datas是中的元素是tuple類型,tuple的第一個參數是python項目中data文件(非py文件)的路徑,
第二個參數是data在exe中保存此資源的文件夾名,要和項目中的文件夾名相同
(3)最重要: 因為編譯成exe之後的main.exe是在最外層的文件夾的。因為main.py是入口文件,所以被調用的其他py文件的當前路徑都是main.py文件的當前路徑。所以在源代碼中就一定要把main.py放到最外層的項目文件夾中,這樣main.py的當前路徑才能和main.exe的路徑保持一致,才能讓其他的py文件的當前路徑不變,他們才可以找到data資源。
4.用之前配置的spec文件製作exe: pyinstaller -d main.spec
使用-d製作出來的exe比使用-f的快很多,因為-f把所有dll文件都打包到一個exe中了。
5.生成的exe在dist文件夾中
Ⅵ python 用py2exe 打包程序報錯 !!! 如何打包依賴求打救.....[抓狂]
在你自己機器上運行時,確保上面說的dll在你的文件路徑下就行了。system32目錄一定在你路徑下,把
python27\dlls
下的幾個文件復制到
exe
文件目錄下試試吧。再不行,改用
pyinstaller
打包吧。我現在放棄
py2exe
改用這個了,感覺比
py2exe
好。話說
py2exe
也好久沒更新了好像。
Ⅶ 怎樣將python程序及其依賴打包成rpm包部署
可以的,雖然說pip比較流行,但rpm從原理上完全可以覆蓋這些部署過程,只有一些小的要求:
所有環境的Python安裝方式必須一致,不能存在某些Python是2.6,某些是2.7,某些裝在/usr/local下面,某些在/usr/lib下面之類的情況
如果帶有C擴展的話,鏈接到的庫應當是來自某個rpm包的。如果沒有的話就簡單多了。
如果有依賴的其他Python包的話,需要把依賴的包也做成rpm;實在偷懶也可以打進同一個rpm中。
實際上發行版中有許多Python庫都以rpm的形式提供,不過一般我們嫌它版本舊,更傾向於用pip管理一組新的。
要寫一個rpm spec,可以從頭自己寫,也可以參考一些其他軟體的spec,我建議你採用後者,既然你們公司已經廣泛使用rpm了,那肯定有很多本公司的spec可以參考,也有人可以問。
回到話題,寫rpm spec,或者說rpmbuild的過程,分成以下步驟:
部署源代碼,一般來說將一個.tar.gz復制到SRC目錄中,然後用%setup宏就可以了,這個宏也基本上沒干什麼特別的事,就是把.tar.gz解壓縮了一下,然後進入相應目錄。.tar.gz只要從git中取出干凈的源代碼,整個目錄打成tar包就可以了。好像還有專門的git-archive命令。
build過程,對應C/C++項目中的./configure, make。對Python項目來說一般可以跳過,因為setup.py都會搞定。也可以選擇在這個階段使用setup.py進行build,build出一個wheel包來,這是我推薦的方法,因為wheel包和直接setup.py install的目錄結構有一些差異,而pip安裝默認是按照wheel的方式。也就是說在這一步調用:setup.py bdist_wheel。再精細一點可以指定build的目標為build目錄,這樣需要cleanup的時候容易一些。
install過程,對應C/C++項目中的make install。一般來說我們平時怎麼裝這個軟體,這一步就怎麼裝,所以我們也是使用setup.py。唯一的技巧在於,我們需要指定安裝的目標到rpmbuild根的某個目錄下面,而不是系統的目錄。這個目錄在install開始之前應當被清空。可以參考其他spec。對於我們來說,就是將Python的庫安裝到指定的目錄,而不是系統的site-packges當中。如果你在build這一步已經打包了wheel,那麼使用wheel install命令、指定目標文件夾就可以了。
打包過程,rpm的打包原理非常簡單,最開始install的目錄是空的,install完成後裡面有了一堆文件,那麼就按照文件列表將這一堆文件打包、然後指定每個文件將來應當安裝到什麼位置。對於Python項目來說,一般會安裝package名的目錄和EGGINFO兩個目錄,將這兩個目錄連同裡面所有的內容一起加入%files段就可以了。如果你要部署的是某個應用,一般你還會希望將init.d中的啟動腳本、或者 systemd的配置文件以及其他應用的配置文件一起部署了,可以在install的過程中將這些文件從源文件目錄中復制到目標文件夾里,然後加到files段裡面。
安裝、卸載腳本。表現為%pre, %post之類的段一般來說如果你有服務要安裝的話,需要在這里使用chkconfig, chkconfig on,或者systemd的話就是systemctl enable。如果你希望安裝完有個機會修改配置文件,可以選擇在首次安裝的時候不要啟動服務,而在update的時候啟動服務,這可以通過腳本傳進的第一個命令行參數$1進行判斷,0、1、2表示不同的情況(分別是卸載、安裝、更新,具體的記不清了),可以參考其他人寫的spec;也可以選擇安裝完永遠直接啟動,在post中使用service xxx start, 在preuninstall的時候使用service xxx stop。
rpm的功能還是很強大的,除了跟pip共通的功能以外,它有一個顯著的好處就是可以幫助你同時管理服務的配置、啟動和停止,從而簡化部署過程。不過要注意如果使用rpm的話就不要同時使用pip,否則pip更新過的庫,rpm卸載或更新時會沖突。
有第三方依賴的時候,一種方法是為每個依賴項寫一個獨立的spec,裡面內容都是上面這樣的直接調用setup.py,或者更簡單一些,在install的時候直接調用pip就可以;然後在需要這些依賴項的rpm包的spec當中寫上Require信息,跟pip體系的requirements差不多。偷懶也可以在同一個rpm中打了一堆Python包進去,但是如果有多個獨立安裝的rpm都打了同一個Python包,就會沖突,要注意。
其實用習慣了會覺得也不比pip差,需要跟非Python組件混合部署的時候反而會覺得簡單了很多。
Ⅷ python如何打包稱exe
最近寫了一個小小的程序,需要進行封裝exe,為了簡單,就直接用了pyinstaller這個模塊,對於python3.6版本的童鞋來說,簡直方便的不要。下面就給大家介紹一下如何用pyinstaller去封裝程序為exe程序。
首先,需要安裝一下pip這個應用,這個已經在前面的文章中說過了,windows和linux都有請借鑒windows和linux。
第二步,安裝好pip之後,在cmd命令窗口中輸入pip install pyinstaller即能安裝上pyinstaller,那麼接下來要介紹一下關於pyinstaller幾個指令了:
-w指令
直接發布的exe應用帶命令行調試窗口,在指令內加入-w命令可以屏蔽;
-F指令
注意指令區分大小寫。這里是大寫。使用-F指令可以把應用打包成一個獨立的exe文件,否則是一個帶各種dll和依賴文件的文件夾;
-p指令
這個指令後面可以增加pyinstaller搜索模塊的路徑。因為應用打包涉及的模塊很多。這里可以自己添加路徑。不過經過筆者測試,site-packages目錄下都是可以被識別的,不需要再手動添加。
那麼通常是使用-F指令,使用的語法是:pyinstaller -F (python程序名稱).py