1. 程式人生 > >python中自動化部署setup.py的寫法

python中自動化部署setup.py的寫法

編寫python的第三方庫,最重要的一個工作就是編寫setup.py了,如果我們下載過一些第三庫的原始碼檔案,開啟之後一般就會有一個setup.py,執行python setup.py install 就可以安裝這個庫了。setup.py 如何編寫內容很多,可以參考官方文件:https://wiki.python.org/moin/Distutils/Tutorial?highlight=%28setup.py%29

一個典型的setup.py的寫法如下(參考自官方文件):

from distutils.core import setup

#這是一個和根目錄相關的安裝檔案的列表,列表中setup.py更具體)

files = ["things/*"]

setup(name = "appname",
    version = "100",
    description = "yadda yadda",
    author = "myself and I",
    author_email = "
[email protected]
", url = "whatever", #Name the folder where your packages live: #(If you have other packages (dirs) or modules (py files) then #put them into the package directory - they will be found recursively.) packages = ['package'], #'package' package must contain files (see list above) #I called the package 'package' thus cleverly confusing the whole issue... #This dict maps the package name =to=> directories #It says, package *needs* these files. package_data = {'package' : files }, #'runner' is in the root. scripts = ["runner"], long_description = """Really long text here.""" # #This next part it for the Cheese Shop, look a little down the page. #classifiers = [] )

建立一個名字叫setup.py的檔案, 從distutils.core 匯入 setup, 然後編寫 setup()函式,這個函式裡面有相當多的屬性,如果是正規的開發,所有這些東西都應該按照規範去寫。其中比較重要的幾個選項:

  • version :版本號,
  • description :描述文件,
  • author:作者,
  • name:模組的名稱。
  • packages:包所在的目錄,如果我們要打包的所有python檔案都在根目錄,即和setup.py是一個目錄,那麼直接寫 packages=[""]就可以了。如果python檔案在一個單獨的資料夾,和setup.py不在同一個目錄,則需要寫 package_dir=["":"python 檔案所在的目錄名字"],比如如果有foo1.py 和 foo2.py這兩個檔案,在src這個資料夾,那麼需要寫package_dir=["":"src"],同時寫packages=[""],打包就可以匯入foo1和foo2兩個模組了。如果想在同一個包中包含多個模組,比如在foo包中包含foo1和foo2兩個模組,則可以直接把foo1.py和foo2.py所在的資料夾直接命名為foo,然後寫 packages["foo"] (注意foo資料夾需要有__init__.py這個檔案,可以為空,這樣才能引用到foo1和foo2)。

有時我們寫的程式碼需要引入一些額外的資訊檔案,比如文字檔案,或者圖片,說明檔案等等,這些東西是需要一塊打包的,那麼這個時候該如何指定呢?此時需要用到 data_files 這個選項了。

  • data_files的寫法是:data_files= [('檔案要放入的資料夾1',['file1',file2']),('檔案要放入的資料夾2',['file3',file4'])],file1,file2等是檔案的名稱,注意data_files的元素都是元組,元組的第一個元素是檔案要放入的資料夾名稱,第二個元素是檔案列表。這裡需要注意的是,如果不想把檔案放入資料夾,可以將元組的第一個元素指定為空字串,此時要打包的檔案要被放入根目錄,這裡根目錄是指python直譯器所在的目錄。比如我需要將檔案資源放入python直譯器所在目錄下的/Lib/site-packages/myfolder路徑,myfolder是自定義的資料夾,元組的第一個元素就可以寫‘Lib/site-packages/myfolder’,打包時會自動在指定位置新建一個名為myfolder的目錄,將檔案資源放入其中。

其實 setup.py 檔案的編寫還有非常多的內容,這裡只是介紹了九牛一毛。後面接觸到了更復雜的再繼續補充吧。具體還是要參考官方文件。

打包命令

簡單來說,linux下的打包命令是:python setup.py sdist 為模組建立一個原始碼包。在windows下,可以使用 python setup.py bdist_wininst 生成一個exe檔案。雙擊該exe檔案,就會彈出python庫的安裝介面(就是經典的藍色介面),可以自己選擇要安裝的位置(特別是電腦中有多個版本的python的時候,需要指定這個庫裝到哪個python庫目錄下),一路下一步,就安裝成功了。此時去指定的python庫目錄下,就會發現多出了一些我們自己安裝的檔案以及資料夾。此時試著import一下,就會發現已經可以匯入我們自己的模組了。

1、packages
告訴Distutils需要處理那些包(包含__init__.py的資料夾)
2、package_dir
告訴Distutils哪些目錄下的檔案被對映到哪個原始碼包。一個例子:package_dir = {'': 'lib'},表示“root package”中的模組都在lib目錄中。
3、ext_modules
是一個包含Extension例項的列表,Extension的定義也有一些引數。
4、ext_package
定義extension的相對路徑
5、requires
定義依賴哪些模組
6、provides
定義可以為哪些模組提供依賴
7、scripts
指定python原始碼檔案,可以從命令列執行。在安裝時指定--install-script
8、package_data
通常包含與包實現相關的一些資料檔案或類似於readme的檔案。如果沒有提供模板,會被新增到MANIFEST檔案中。
9、data_files
指定其他的一些檔案(如配置檔案)

相關推薦

python自動化部署setup.py寫法

編寫python的第三方庫,最重要的一個工作就是編寫setup.py了,如果我們下載過一些第三庫的原始碼檔案,開啟之後一般就會有一個setup.py,執行python setup.py install 就可以安裝這個庫了。setup.py 如何編寫內容很多,可以參考官方文件:

python 編寫簡單的setup.py

ria 如何 代碼 使用 文本 highlight ttl pac 文件夾   學習python也已經有一段時間了,發現python作為腳本語言一個很重要的特點就是簡單易用,而且擁有巨多的第三方庫,幾乎方方面面的庫都有,無論你處於哪個行業,想做什麽工作,幾乎都能找到對應的第

Pythonif-else的多種寫法

and 得到 寫法 基本語法 方式 最大值 默認值 als pytho a, b= 1, 2 將a和b兩個變量中的最大值賦值給c (1)常規寫法 if a>b: c = a else: c = b (2)表達式 c = a if a>b el

docker-compose, docker registry2,Python 指令碼 自動化 部署 spring boot 進銷存系統

準備環境 虛擬機器兩臺 centos 7.2 192.168.255.128 centos 7.2 192.168.255.129 maven 3.0.5 java 1.8.0_181 git version 1.8.3.1 Python 2.7.5 docker r

maven,git python指令碼 自動化 部署 spring boot進銷存系統

準備環境 虛擬機器兩臺 centos 7.2 192.168.255.128 centos 7.2 192.168.255.129 maven 3.0.5 java 1.8.0_181   git version 1.8.3.1 安裝 git yum in

pythonopen函式開啟.py檔案,編碼錯誤

問題: python中open函式開啟.py檔案,會報錯 >>> file=open('example.py','r') >>> for line in file:print(line) ... Traceback (most rec

Pythondocstring文件的寫法

該寫法根據Python的PEP 257文件總結。類的函式稱為方法(method),模組裡的函式稱為函式(function) 每一個包,模組,類,函式,方法都應該包含文件,包括類的__init__方法 包的文件寫在__init__.py檔案中 文件有單行文件和多行文件 單行文件:

python 自動化記憶體管理問題

python 中自動化記憶體管理 問題: 使用賦值語句 a = 10000 b = 20000 a = a + b # 發生了什麼? c = a # 發生了什麼? a = 10000 記憶體中建立一個10000物件,用變數

python 各種簡單的程式碼寫法

該篇部落格主要記錄python中各種簡單的程式碼的寫法,持續更新: 1.lambda: 它主要是簡化函式的定義。在一般情況下我們定義一個函式通常是: def test(x): return x+1 而是用lambda可以簡化為: test =lambda x:x

Python模組安裝與setup.py解析

Python模組安裝 1. 單檔案模組 直接把檔案拷貝到$python_dir/lib 2. 多檔案模組,帶setup.py python setup.py install 3. egg檔案 1) 下載ez_setup.py,執行python ez_setup

如何使用和製作 Python 安裝模組(setup.py

Python模組的安裝方法:1. 單檔案模組:直接把檔案拷貝到$python_dir/lib2. 多檔案模組,帶setup.py:python setup.py install        3. egg檔案,類似Java的jar:1) 下載ez_setup.py,執行pyt

pythonRedis部署主從關係

一.Redis屬於非關係型資料庫 1)修改配置檔案(找到redis下的redis.windows.conf) 1. 修改主的配置檔案:搜尋bind,將後面的ip改成當前服務 器ip 2. 修改從的配置檔案:搜尋slaveof,將該程式碼解註釋,然

python setup.py 使用方式

#python setup.py --help-commands Standard commands: build:      build everything needed to install build_py:  

pythonsetup.py詳解

前言 其實對於setup.py和setup.cfg的關注是從OpenStack的原始碼包中開始的,OpenStack每個元件的釋出時都是一個tar.gz包,同樣,我們直接從github上clone程式碼後也會發現兩個檔案的存在。當閱讀Nova或Ceilometer(其

關於pythonsetup.py

本文是轉載的,源地址:http://lingxiankong.github.io/blog/2013/12/23/python-setup/ 感謝作者,解決了我一個大問題 前言 其實對於setup.py和setup.cfg的關注是從OpenStack的原始碼包中開始

解決安裝ipython時Command "python setup.py egg_info" failed with error code 1 in /tmp

ipython pip failed python2.7 ipython 6.0+ 最近使用ubuntu16.04 server版安裝ipython的時候一直在報錯:IPython 6.0+ does not support Python 2.6, 2.7, 3.0, 3.1, or 3.

Jenkins持續集成-自動化部署腳本的實現《python

recommend private ogr 部署腳本 rsync服務端 imp mail other esc 讀者須知:1、本手記本著記續接前面的兩張手記內容整理2、本手記針對tomcat部署測試環境實現最近工作比較繁忙,導致這章一直拖延,沒有太抽出時間來總結。要實現Jen

python:用setup.py安裝第三方包packages

span 步驟 tex size 三方 href target stat data python:用setup.py安裝第三方包packages 原創 2016年12月10日 15:17:56 標簽: python 8531 這

通過setup.py安裝的python軟件包

body setup.py div nbsp 軟件包 bsp pytho pos 安裝 安裝:sudo python setup.py install 卸載:sudo python setup.py install --record log sudo

Python__init__.py文件作用之我見

__init__.py python 在Python中每次創建一個package後都會自動生成一個 __init__.py‘空文件;該問價的作用是:聲明我們當前創建的文件夾(包)是一個**Python模塊**,在Python中每一個包中必須有一個__init__ .py文件. 一般這個文件都為空,只