1. 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學習網!
2. python常用的數據分析包有哪些
ndarray.ndim
數組軸的個數,在python的世界中,軸的個數被稱作秩
ndarray.shape
數組的維度。這是一個指示數組在每個維度上大小的整數元組。例如一個n排m列的矩陣,它的shape屬性將是(2,3),這個元組的長度顯然是秩,即維度或者ndim屬性
ndarray.size
數組元素的總個數,等於shape屬性中元組元素的乘積。
ndarray.dtype
一個用來描述數組中元素類型的對象,可以通過創造或指定dtype使用標准Python類型。另外NumPy提供它自己的數據類型。
ndarray.itemsize
數組中每個元素的位元組大小。例如,一個元素類型為float64的數組itemsiz屬性值為8(=64/8),又如,一個元素類型為complex32的數組item屬性為4(=32/8).
ndarray.data
包含實際數組元素的緩沖區,通常我們不需要使用這個屬性,因為我們總是通過索引來使用數組中的元素。
NumPy-快速處理數據
標准安裝的Python中用列表(list)保存一組值,可以用來當作數組使用,不過由於列表的元素可以是任何對象,因此列表中所保存的是對象的指針。這樣為了保存一個簡單的[1,2,3],需要有3個指針和三個整數對象。對於數值運算來說這種結構顯然比較浪費內存和CPU計算時間。
此外Python還提供了一個array模塊,array對象和列表不同,它直接保存數值,和C語言的一維數組比較類似。但是由於它不支持多維,也沒有各種運算函數,因此也不適合做數值運算。
NumPy的誕生彌補了這些不足,NumPy提供了兩種基本的對象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文統一稱之為數組)是存儲單一數據類型的多維數組,而ufunc則是能夠對數組進行處理的函數。
3. python怎麼定義addcat
Python中的Mole是比較重要的概念。常見的情況是,事先寫好一個.py文 件,在另一個文件中需要import時,將事先寫好的.py文件拷貝 到當前目錄,或者是在sys.path中增加事先寫好的.py文件所在的目錄,然後import。這樣的做法,對於少數文件是可行的,但如果程序數目很 多,層級很復雜,就很吃力了。
有沒有辦法,像Java的Package一樣,將多個.py文件組織起來,以便在外部統一調用,和在內部互相調用呢?答案是有的。
主要是用到python的包的概念,python
__init__.py在包里起一個比較重要的作用
要弄明白這個問題,首先要知道,python在執行import語句時,到底進行了什麼操作,按照python的文檔,它執行了如下操作:
第1步,創建一個新的,空的mole對象(它可能包含多個mole);
第2步,把這個mole對象插入sys.mole中
第3步,裝載mole的代碼(如果需要,首先必須編譯)
第4步,執行新的mole中對應的代碼。
在執行第3步時,首先要找到mole程序所在的位置,其原理為:
如 果需要導入的mole的名字是m1,則解釋器必須找到m1.py,它首先在當前目錄查找,然後是在環境變數PYTHONPATH中查找。 PYTHONPATH可以視為系統的PATH變數一類的東西,其中包含若干個目錄。如果PYTHONPATH沒有設定,或者找不到m1.py,則繼續搜索 與python的安裝設置相關的默認路徑,在Unix下,通常是/usr/local/lib/python。
事實上,搜索的順序是:當前路徑 (以及從當前目錄指定的sys.path),然後是PYTHONPATH,然後是python的安裝設置相關的默認路徑。正因為存在這樣的順序,如果當前 路徑或PYTHONPATH中存在與標准mole同樣的mole,則會覆蓋標准mole。也就是說,如果當前目錄下存在xml.py,那麼執 行import
xml時,導入的是當前目錄下的mole,而不是系統標準的xml。
了解了這些,我們就可以先構建一個package,以普通mole的方式導入,就可以直接訪問此package中的各個mole了。
Python中的package定義很簡單,其層次結構與程序所在目錄的層次結構相同,這一點與Java類似,唯一不同的地方在於,python中的package必須包含一個__init__.py的文件。
例如,我們可以這樣組織一個package:
package1/
__init__.py
subPack1/
__init__.py
mole_11.py
mole_12.py
mole_13.py
subPack2/
__init__.py
mole_21.py
mole_22.py
……
__init__.py可以為空,只要它存在,就表明此目錄應被作為一個package處理。當然,__init__.py中也可以設置相應的內容,下文詳細介紹。
好了,現在我們在mole_11.py中定義一個函數:
def funA():
print "funcA in mole_11"
return
在頂層目錄(也就是package1所在的目錄,當然也參考上面的介紹,將package1放在解釋器能夠搜索到的地方)運行python:
>>>from package1.subPack1.mole_11 import funcA
>>>funcA()
funcA in mole_11
這樣,我們就按照package的層次關系,正確調用了mole_11中的函數。
細心的用戶會發現,有時在import語句中會出現通配符*,導入某個mole中的所有元素,這是怎麼實現的呢?
答案就在__init__.py中。我們在subPack1的__init__.py文件中寫
__all__ = ['mole_13', 'mole_12']
然後進入python
>>>from package1.subPack1 import *
>>>mole_11.funcA()
Traceback (most recent call last):
File "", line 1, in
ImportError: No mole named mole_11
也就是說,以*導入時,package內的mole是受__init__.py限制的。
好了,最後來看看,如何在package內部互相調用。
如果希望調用同一個package中的mole,則直接import即可。也就是說,在mole_12.py中,可以直接使用
import mole_11
如果不在同一個package中,例如我們希望在mole_21.py中調用mole_11.py中的FuncA,則應該這樣:
from mole_11包名.mole_11 import
funcA
包機制
# a.py
def add_func(a,b):
return a+b
# b.py
from a import add_func # Also can be : import a
print ("Import add_func from mole a")
print ("Result of 1 plus 2 is: ")
print (add_func(1,2)) # If using "import a" , then here should be "a.add_func"
mole可以定義在包裡面.Python定義包的方式稍微有點古怪,假設我們有一個parent文件夾,該文件夾有一個child子文件夾.child中有一個mole
a.py . 如何讓Python知道這個文件層次結構?很簡單,每個目錄都放一個名為_init_.py 的文件.該文件內容可以為空.這個層次結構如下所示:
parent
--__init_.py
--child
-- __init_.py
--a.py
b.py
那麼Python如何找到我們定義的mole?在標准包sys中,path屬性記錄了Python的包路徑.你可以將之列印出來:
import sys
print(sys.path)
通常我們可以將mole的包路徑放到環境變數PYTHONPATH中,該環境變數會自動添加到sys.path屬性.另一種方便的方法是編程中直接指定我們的mole路徑到sys.path 中:
import sys
import os
sys.path.append(os.getcwd()+'\\parent\\child')
print(sys.path)
from a import add_func
print (sys.path)
print ("Import add_func from mole a")
print ("Result of 1 plus 2 is: ")
print (add_func(1,2))
知識點:
如何定義模塊和包
如何將模塊路徑添加到系統路徑,以便python找到它們
如何得到當前路徑
4. python數據挖掘工具包有什麼優缺點
【導讀】python數據挖掘工具包就是scikit-learn,scikit-learn是一個基於NumPy, SciPy,
Matplotlib的開源機器學習工具包,主要涵蓋分類,回歸和聚類演算法,例如SVM,
邏輯回歸,樸素貝葉斯,隨機森林,k-means等演算法,代碼和文檔都非常不錯,在許多Python項目中都有應用。
優點:
1、文檔齊全:官方文檔齊全,更新及時。
2、介面易用:針對所有演算法提供了一致的介面調用規則,不管是KNN、K-Means還是PCA.
3、演算法全面:涵蓋主流機器學習任務的演算法,包括回歸演算法、分類演算法、聚類分析、數據降維處理等。
缺點:
缺點是scikit-learn不支持分布式計算,不適合用來處理超大型數據。
Pandas是一個強大的時間序列數據處理工具包,Pandas是基於Numpy構建的,比Numpy的使用更簡單。最初開發的目的是為了分析財經數據,現在已經廣泛應用在Python數據分析領域中。Pandas,最基礎的數據結構是Series,用它來表達一行數據,可以理解為一維的數組。另一個關鍵的數據結構為DataFrame,它表示的是二維數組
Pandas是基於NumPy和Matplotlib開發的,主要用於數據分析和數據可視化,它的數據結構DataFrame和R語言里的data.frame很像,特別是對於時間序列數據有自己的一套分析機制。有一本書《Python
for Data Analysis》,作者是Pandas的主力開發,依次介紹了iPython, NumPy,
Pandas里的相關功能,數據可視化,數據清洗和加工,時間數據處理等,案例包括金融股票數據挖掘等,相當不錯。
Mlpy是基於NumPy/SciPy的Python機器學習模塊,它是Cython的擴展應用。
關於python數據挖掘工具包的優缺點,就給大家介紹到這里了,scikit-learn提供了一致的調用介面。它基於Numpy和scipy等Python數值計算庫,提供了高效的演算法實現,所以想要學習python,以上的內容得學會。
5. python如何粘包有沒有專門的函數之類的
粘包與拆包是由於TCP協議是位元組流協議,沒有記錄邊界所導致的。所以如何確定一個完整的業務包就由應用層來處理了。(這就是分包機制,本質上就是要在應用層維護消息與消息的邊界。)
分包機制一般有兩個通用的解決方法;
1:特殊字元控制,例如FTP協議。2:在包頭首都添加數據包的長度,例如HTTP協議。
所以說:粘包這種情況應用程序根本干涉不了,只能採用分包技術在應用層解決該問題。
6. python的回收機制是什麼
Python中的垃圾回收機制總體上有三種,
引用計數
Python語言默認採用的垃圾收集機制是『引用計數法 Reference Counting』,該演算法最早George E. Collins在1960的時候首次提出,50年後的今天,該演算法依然被很多編程語言使用,『引用計數法』的原理是:每個對象維護一個ob_ref欄位,用來記錄該對象當前被引用的次數,每當新的引用指向該對象時,它的引用計數ob_ref加1,每當該對象的引用失效時計數ob_ref減1,一旦對象的引用計數為0,該對象立即被回收,對象佔用的內存空間將被釋放。它的缺點是需要額外的空間維護引用計數,這個問題是其次的,不過最主要的問題是它不能解決對象的「循環引用」,因此,也有很多語言比如Java並沒有採用該演算法做來垃圾的收集機制。
在上圖中,我們把小黑圈視為全局變數,也就是把它作為root object,從小黑圈出發,對象1可直達,那麼它將被標記,對象2、3可間接到達也會被標記,而4和5不可達,那麼1、2、3就是活動對象,4和5是非活動對象會被GC回收。
標記清除演算法作為Python的輔助垃圾收集技術主要處理的是一些容器對象,比如list、dict、tuple,instance等,因為對於字元串、數值對象是不可能造成循環引用問題。Python使用一個雙向鏈表將這些容器對象組織起來。不過,這種簡單粗暴的標記清除演算法也有明顯的缺點:清除非活動的對象前它必須順序掃描整個堆內存,哪怕只剩下小部分活動對象也要掃描所有對象。
分代回收
分代回收是一種以空間換時間的操作方式,Python將內存根據對象的存活時間劃分為不同的集合,每個集合稱為一個代,Python將內存分為了3「代」,分別為年輕代(第0代)、中年代(第1代)、老年代(第2代),他們對應的是3個鏈表,它們的垃圾收集頻率與對象的存活時間的增大而減小。新創建的對象都會分配在年輕代,年輕代鏈表的總數達到上限時,Python垃圾收集機制就會被觸發,把那些可以被回收的對象回收掉,而那些不會回收的對象就會被移到中年代去,依此類推,老年代中的對象是存活時間最久的對象,甚至是存活於整個系統的生命周期內。同時,分代回收是建立在標記清除技術基礎之上。分代回收同樣作為Python的輔助垃圾收集技術處理那些容器對象。
Python垃圾回收機制--完美講解! 東皇Amrzs
Python中的垃圾回收機制
7. python構成一個程序最基本的三部分
python程序可以分解為模塊、語句、表達式和對象四部分
1,模塊包含語句
2,語句包含表達式
3,表達式建立並處理對象
8. 求下面python代碼的差別。
題主你好,
你不明白上面代碼的原因,是因為你沒弄明白python包導入的相關機制.
a.先說一下包, 包其實就是一個文件夾,我們假設這個文件夾叫A;
b.還有一個子包的概念, 結合上一句話,假如說包A下有個子包B,說白了就是A文件夾下有個子文件夾B;
c.再說一下包的特殊之處,就是每個包根目錄下都有一個__init__.py文件, 關鍵來了, 這個__init__.py就是你在導入包的時候被執行的文件.
------------------------
先看一下selenium包的結構:
一環套一環吧.
寫在最後: 其實問題關鍵點就一個: 直接導入包, 相當於執行包下的__init__.py文件, 而你第2種方法不能使用selenium.webdriver的原因是selenium文件夾下的__init__.py文件中沒有相應的導入操作
希望可以幫到題主, 歡迎追問
9. Python是什麼
Python由荷蘭數學和計算機科學研究學會的Guido van Rossum 於1990
年代初設計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。Python語法和動態類型,以及解釋型語言的本質,使它成為多數平台上寫腳本和快速開發應用的編程語言,隨著版本的不斷更新和語言新功能的添加,逐漸被用於獨立的、大型項目的開發。
Python解釋器易於擴展,可以使用C或C++(或者其他可以通過C調用的語言)擴展新的功能和數據類型。Python
也可用於可定製化軟體中的擴展程序語言。Python豐富的標准庫,提供了適用於各個主要系統平台的源碼或機器碼。
10. Python中有autoload機制嗎
即使放入包中,也需要在文件開頭import這個包時,才會起作用。
有點怪。
說個實際的問題,大家可能就有體會了。
python2.6中改變默認除法運行需要「from __future__ import division」,
假設我目的很明確,我所有的代碼都希望以上面的方式進行除法運算,那麼,現在我得每個文件頭加這一行代碼,
要是能有某種方式在一處位置就能解決這個目的,會方便很多。