Ⅰ 編譯安裝python需要哪些依賴
依賴庫:
//使用apt 安裝即可
1.gcc, make, zlib1g-dev(壓縮/解壓縮庫)
安裝過程需要的庫。
2.libbz2-dev
bz2支持庫,若在編譯安裝python前沒有安裝,將無法通過pip install 安裝提供bz2格式的第三方庫,會出現unsupported archive format: .tar.bz2的錯誤,例如爬蟲庫Scrapy依賴的Twisted。
3.libsqlite3-dev
sqlite3支持庫,若在編譯安裝python前沒有安裝,則python中會缺失sqlite3模塊,當引入sqlite3或使用依賴sqllite3的第三方庫(例如Scrapy)時,會出現ImportError: No mol named _sqllite3的錯誤。
//以上為編譯安裝前需要安裝的庫,可能不夠全面,會不斷補充。
4.其他:安裝第三方庫需要的庫
python3-dev, libxml2-dev, libxslt1, libffi-dev, libssl-dev等,在安裝第三方庫會有具體說明,不做過多解釋。
安裝:
//通過wget獲取壓縮包,這里選擇3.6.1版
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
//解壓
tar xJf Python-3.6.1.tar.xz
cd Python-3.6.1
./configure
make
/*這步如果需要sudo,請使用sudo -H命令,即sudo -H make install,避免pip等模塊安裝失敗。
錯誤示例(pip安裝失敗):The directory '/home/ls/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
*/
make install
Ⅱ 怎樣將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多介面有依賴如何調用
方法如下:
1. 對於單介面測試如果依賴介面只需要在測試開始執行一次,那麼可以將依賴介面的請求放在類級前置方法中,然後通過全局變數或者當前用例類屬性來傳遞依賴數據。
2. 對於單介面測試如果依賴介面需要在每個用例前執行,那麼可以將依賴介面的請求放在方法級前置方法中,然後通過用例對象屬性來傳遞依賴數據
3. 對於多介面的業務流測試,可以將下一個介面需要依賴的數據通過當前用例類屬性來傳遞依賴數據。
Python由荷蘭數學和計算機科學研究學會的Guido van Rossum 於1990 年代初設計,作為一門叫做ABC語言的替代品。 Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。Python語法和動態類型,以及解釋型語言的本質,使它成為多數平台上寫腳本和快速開發應用的編程語言,隨著版本的不斷更新和語言新功能的添加,逐漸被用於獨立的、大型項目的開發。
Ⅳ python怎麼安裝依賴庫
用安裝工具,例如pip 在cmd中輸入pip install XXX.
Ⅳ python依賴庫libcrypto求助
在Python開發的過程中,經常會遇到各種各樣的小問題,比如在一台計算機上調試好的程序,遷移到另外一台機子上後往往會應為工程項目依賴庫的缺失而造成錯誤。
除了一遍又一遍對著被拋出錯誤去重新install各種相關的依賴庫,有沒有更好的方法來解決Python開發過程中依賴庫的打包呢?答案是肯定的。
類似於JavaScript的npm,Python也有它強大的包管理工具——pip,我們可以用pip導出項目中的dependency:
1 $ pip freeze > requirements.txt
然後通過以下命令來安裝dependency:
1 $ pip install -r requirements.txt
經過上述兩個步驟,就可以在伺服器部署的時候直接安裝需要的依賴庫,而不用等著報錯再去一個一個安裝了。
另外,有些小細節也是值得一提的,那就是"pip freeze > requirements.txt"指令必須用在整個工程項目完全跑通了(也就是項目依賴已經全部安裝完成)的情況下,才能將所有的有關依賴庫寫入requirements.txt文件中去,而「pip install -r requirements.txt」指令則使用於伺服器部署時較為合適。
Ⅵ 如何打包Python腳本使用的Python庫
使用pyinstaller吧
1、下載pyinstaller
目前pyinstaller支持的python版本為2.3-2.7,可以到官網下載。
2、安裝
下載完成後,解壓即可。
3、pyinstaller使用方法
使用也非常的簡單,cmd下進入解壓出來的目錄,執行如下命令。
python pyinstaller.py [opts] yourprogram.py
主要選項包括:
-F, –onefile 打包成一個exe文件。
-D, –onedir 創建一個目錄,包含exe文件,但會依賴很多文件(默認選項)。
-c, –console, –nowindowed 使用控制台,無界面(默認)
-w, –windowed, –noconsole 使用窗口,無控制台
Ⅶ 編譯安裝python需要哪些依賴
依賴庫:
//使用apt
安裝即可
1.gcc,
make,
zlib1g-dev(壓縮/解壓縮庫)
安裝過程需要的庫。
2.libbz2-dev
bz2支持庫,若在編譯安裝python前沒有安裝,將無法通過pip
install
安裝提供bz2格式的第三方庫,會出現unsupported
archive
format:
.tar.bz2的錯誤,例如爬蟲庫Scrapy依賴的Twisted。
3.libsqlite3-dev
sqlite3支持庫,若在編譯安裝python前沒有安裝,則python中會缺失sqlite3模塊,當引入sqlite3或使用依賴sqllite3的第三方庫(例如Scrapy)時,會出現ImportError:
No
mol
named
_sqllite3的錯誤。
//以上為編譯安裝前需要安裝的庫,可能不夠全面,會不斷補充。
4.其他:安裝第三方庫需要的庫
python3-dev,
libxml2-dev,
libxslt1,
libffi-dev,
libssl-dev等,在安裝第三方庫會有具體說明,不做過多解釋。
安裝:
//通過wget獲取壓縮包,這里選擇3.6.1版
wget
https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
//解壓
tar
xJf
Python-3.6.1.tar.xz
cd
Python-3.6.1
./configure
make
/*這步如果需要sudo,請使用sudo
-H命令,即sudo
-H
make
install,避免pip等模塊安裝失敗。
錯誤示例(pip安裝失敗):The
directory
'/home/ls/.cache/pip'
or
its
parent
directory
is
not
owned
by
the
current
user
and
caching
wheels
has
been
disabled.
check
the
permissions
and
owner
of
that
directory.
If
executing
pip
with
sudo,
you
may
want
sudo's
-H
flag.
*/
make
install
Ⅷ python為什麼庫依賴
庫是可以幫你更方便地寫python裝飾器代碼,更重要的是,它讓Python中被裝飾器裝飾後的方法長得更像裝飾前的方法。
從庫的名稱不難看出,這是一個專門用來解決裝飾器問題的第三方庫。有了它之後,你會驚奇的發現,以後自己定義的裝飾器,就再也不需要寫嵌套的函數了。
decorator是一個提高裝飾器編碼效率的第三方庫,它適用於對裝飾器原理感到困惑的新手,可以讓你很輕易的寫出更符合人類直覺的代碼。
Ⅸ python調用動態庫(並且動態庫依賴其它動態庫)
請問解決了嗎?求幫助,四天了還沒解決,要被開除了
我的已解決,不知道你情況一不一樣,我是python調用一個.c文件,文件裡面調用了openssl庫的代碼,剛開始一直調用不到openssl庫的代碼,即使include沒有報錯。
後來把那個.c文件也鏈接到openssl庫的相應.so文件,也就是ldd那個.c文件生成的.so文件的時候,能夠看到,依賴了openssl庫相應的.so文件,我在linux下需要通過ldconfig 「目錄」來設備依賴庫的目錄(目錄是openssl庫相應的.so文件所在目錄(一般是.../lib))
Ⅹ python怎麼生成可執行文件
Python是一個腳本語言,被解釋器解釋執行。它的發布方式:
.py文件:對於開源項目或者源碼沒那麼重要的,直接提供源碼,需要使用者自行安裝Python並且安裝依賴的各種庫。(Python官方的各種安裝包就是這樣做的)
.pyc文件:有些公司或個人因為機密或者各種原因,不願意源碼被運行者看到,可以使用pyc文件發布,pyc文件是Python解釋器可以識別的二進制碼,故發布後也是跨平台的,需要使用者安裝相應版本的Python和依賴庫。
可執行文件:對於非碼農用戶或者一些小白用戶,你讓他裝個Python同時還要折騰一堆依賴庫,那簡直是個災難。對於此類用戶,最簡單的方式就是提供一個可執行文件,只需要把用法告訴Ta即可。比較麻煩的是需要針對不同平台需要打包不同的可執行文件(Windows,Linux,Mac,...)。
- pip install pyinstaller
- python setup.py install
- pyinstaller --version
pyinstaller: 打包可執行文件的主要命令,詳細用法下面會介紹。
pyi-archive_viewer: 查看可執行包裡面的文件列表。
pyi-bindepend: 查看可執行文件依賴的動態庫(.so或.dll文件)
pyi-...: 等等。
- pyinstaller [options] script [script ...] | specfile
- pyinstaller mycript.py
- pyinstaller -F mycript.py
- pyi-makespec options script [script ...]
- pyinstaller specfile pyi-build specfile
本文主要就是介紹最後一種方式,.py和.pyc都比較簡單,Python本身就可以搞定。將Python腳本打包成可執行文件有多種方式,本文重點介紹PyInstaller,其它僅作比較和參考。
Freezing Your Code
各種打包工具的對比如下(來自文章Freezing Your Code):
Solution
Windows
Linux
OS X
Python 3
License
One-file mode
Zipfile import
Eggs
pkg_resources support
bbFreeze yes yes yes no MIT no yes yes yes
py2exe yes no no yes MIT yes yes no no
pyInstaller yes yes yes no GPL yes no yes no
cx_Freeze yes yes yes yes PSF no yes yes no
py2app no no yes yes MIT no yes yes yes
PS.其中pyInstaller和cx_Freeze都是不錯的,stackoverflow上也有人建議用cx_Freeze,說是更便捷些。pkg_resources新版的pyInstaller貌似是支持的。
安裝PyInstaller
對於那些網路比較穩定,能夠流暢使用pip源地址的用戶,直接下面的命令就可以搞定:
通常我們會下載源碼包,然後進入包目錄,執行下面的命令(需要安裝setuptools):
安裝完後,檢查安裝成功與否:
安裝成功後,就可以使用下面的命令了:
使用PyInstaller
pyinstaller的語法:
最簡單的用法,在和myscript.py同目錄下執行命令:
然後會看到新增加了兩個目錄build和dist,dist下面的文件就是可以發布的可執行文件,對於上面的命令你會發現dist目錄下面有一堆文件,各種都動態庫文件和myscrip可執行文件。有時這樣感覺比較麻煩,需要打包dist下面的所有東西才能發布,萬一丟掉一個動態庫就無法運行了,好在pyInstaller支持單文件模式,只需要執行:
你會發現dist下面只有一個可執行文件,這個單文件就可以發布了,可以運行在你正在使用的操作系統類似的系統的下面。
當然,pyinstaller還有各種選項,有通用選項,如-d選項用於debug,了解pyInstaller執行的過程;還有一些針對不同平台的選項,具體用法可以訪問PyInstaller官方WIKI。
在執行pyInstaller命令的時候,會在和腳本相同目錄下,生成一個.spec文件,該文件會告訴pyinstaller如何處理你的所有腳本,同時包含了命令選項。一般我們不用去理會這個文件,若需要打包數據文件,或者給打包的二進制增加一些Python的運行時選項時...一些高級打包選項時,需要手動編輯.spec文件。可以使用:
創建一個.spec文件,對於手動編輯的.spec文件,我們可以使用下面任意一條命令:
PyInstaller的原理簡介
PyInstaller其實就是把python解析器和你自己的腳本打包成一個可執行的文件,和編譯成真正的機器碼完全是兩回事,所以千萬不要指望成打包成一個可執行文件會提高運行效率,相反可能會降低運行效率,好處就是在運行者的機器上不用安裝python和你的腳本依賴的庫。在Linux操作系統下,它主要用的binutil工具包裡面的ldd和objmp命令。
PyInstaller輸入你指定的的腳本,首先分析腳本所依賴的其他腳本,然後去查找,復制,把所有相關的腳本收集起來,包括Python解析器,然後把這些文件放在一個目錄下,或者打包進一個可執行文件裡面。
可以直接發布輸出的整個文件夾裡面的文件,或者生成的可執行文件。你只需要告訴用戶,你的應用App是自我包含的,不需要安裝其他包,或某個版本的Python,就可以直接運行了。
需要注意的是,PyInstaller打包的執行文件,只能在和打包機器系統同樣的環境下。也就是說,不具備可移植性,若需要在不同系統上運行,就必須針對該平台進行打包。