作為python標準的打包及分發工具,setuptools可以說相當得簡單易用。相面記錄一下python如何利用setuptools進行分發打包。
方式一:通過python安裝
方式二:yum 安裝
yum install python-setuptools
建立乙個setup-demo目錄
mkdir setup-demo
cd setup-demo
vi say_hello_word.py內容為:
say():
print('hello word !')
在setup-demo目錄下建立乙個setup.py的檔案
vi setup.py
內容為:
from setuptools import setup
setup(
version="1.0",
)
version為版本號
packages為要打包的包名,可以通過陣列的形式指定,也可以通過from setuptools import find_packages 這個方法,讀取setup.py所在目錄的所有包
packages=find_packages()
最後整個目錄結構如下所示:
[root@localhost setup-demo]# find ./
././setup.py
打包成egg檔案
python setup.py bdist_egg
打包後的目錄結構如下圖所示:
[root@localhost setup-demo]# find ./
././setup.py
./build
./build/lib
./build/bdist.linux-x86_64
./dist
.egg
生成的egg檔案會儲存在dist目錄下面。
安裝egg檔案,其實就是通過命令將打包的應用安裝到python環境的「site-packages」目錄下,這樣其他程式就可以向匯入標準庫一樣匯入該應用的**了。
安裝
python setup.py install
或者.egg
測試python 2.7
.5 (default, nov 6
2016, 00:28:07)
[gcc 4.8
.520150623 (red hat 4.8
.5-11)] on
linux2
or"license"
for more information.
>>> say()
hello word !
上例子中只將包下的python檔案打包,如果要打包一些非.py的檔案,需要在setup.py的同級新增乙個manifest.in的配置檔案,來告訴setuptools我們打包的東西包括哪些內容。
目錄結構如下所示:
././setup.py
./manifest.in
words.txt
words
to deal with
handle_word.py
import os
defprint_words
(): f_p = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'word/words.txt')
print(f_p)
with open(f_p) as f :
print(f.read())
manifest.in
清單檔案,用來列出想要引入的目錄路徑
「recursive-include」表明包含子目錄。別急,還有一件事要做,就是在」setup.py」中將」 include_package_data」引數設為true:
from setuptools import setup
setup(
version="1.0",
include_package_data=true
)
如果不想包含某些目錄,可以新增以下配置
setup(
...include_package_data=true, # 啟用清單檔案manifest.in
exclude_package_date=
)
打包
python setup.py install
測試
python 2.7
.5 (default, nov 6
2016, 00:28:07)
[gcc 4.8
.520150623 (red hat 4.8
.5-11)] on
linux2
or"license"
for more information.
>>> pw()
here are some
words
to deal with
python 安裝pip以及setuptools
安裝pip前必須先安裝setuptools,不然會報錯 from setuptools import setup,find packages importerror no module named setuptools 然後將它們解壓到python目錄下,然後進入它們的目錄 python必須先設定好...
python元類的使用 python使用元類
原文 type 動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。比方說我們要定義乙個hello的class,就寫乙個hello.py模組 當python直譯器載入hello模組時,就會依次執行該模組的所有語句,執行結果就是動態建立出乙個hello的class...
Python精通 Python函式使用
在程式設計意義上的函式其實是指完成某種操作的 塊,當然這個是個人的理解,但是這個概念在所有的程式語言中都是通用的。這個 塊用來完成某寫特定的操作。但是在數學上的函式卻是表示某種對應關係,這兩者之間還是有一定的區別的。但是在某種角度上講我們所程式設計的這種 塊其實就是表示的是引數與返回值之間的關係。從...