關於python中的setup.py
本文是轉載的,源地址:http://lingxiankong.github.io/blog/2013/12/23/python-setup/
感謝作者,解決了我一個大問題
前言
其實對於setup.py和setup.cfg的關注是從OpenStack的原始碼包中開始的,OpenStack每個元件的釋出時都是一個tar.gz包,同樣,我們直接從github上clone程式碼後也會發現兩個檔案的存在。當閱讀Nova或Ceilometer(其他元件可能也會涉及)的程式碼時,發現setup.cfg中內容對於程式碼的理解有很大的影響。那麼,到底setup.py和setup.cfg是幹什麼的?
setup.py
我們從例子開始。假設你要分發一個叫foo的模組,檔名foo.py,那麼setup.py內容如下:
from distutils.core import setup
setup(name='foo',
version='1.0',
py_modules=['foo'],
)
然後,執行python setup.py sdist
為模組建立一個原始碼包
[email protected]:/kong/setup# python setup.py sdist
running sdist
running check
warning: check: missing required meta-data: url
warning: check: missing meta-data: either
warning: sdist: manifest template'MANIFEST.in' does not exist (usingdefault file list)
warning: sdist: standard file not found: should have one of README, README.txt
writing manifest file 'MANIFEST'
creating foo-1.0
making hard links
hard linking foo.py -> foo-1.0
hard linking setup.py -> foo-1.0
creating dist
Creating tar archive
removing 'foo-1.0'(and everything under it)
在當前目錄下,會建立dist
目錄,裡面有個檔名為foo-1.0.tar.gz
,這個就是可以分發的包。使用者拿到這個包後,解壓,到foo-1.0目錄下執行:python
setup.py install
,那麼,foo.py就會被拷貝到python類路徑下,可以被匯入使用。
[email protected]:/kong/setup/dist/foo-1.0# python setup.py install
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
copying foo.py -> build/lib.linux-x86_64-2.7
running install_lib
copying build/lib.linux-x86_64-2.7/foo.py ->/usr/local/lib/python2.7/dist-packages
byte-compiling /usr/local/lib/python2.7/dist-packages/foo.py to foo.pyc
running install_egg_info
Removing/usr/local/lib/python2.7/dist-packages/foo-1.0.egg-info
Writing/usr/local/lib/python2.7/dist-packages/foo-1.0.egg-info
[email protected]:/kong/setup/dist/foo-1.0# ll /usr/local/lib/python2.7/dist-packages/foo
foo-1.0.egg-info foo.py foo.pyc
對於Windows,可以執行python setup.py bdist_wininst
生成一個exe檔案;若要生成RPM包,執行python
setup.py bdist_rpm
,但系統必須有rpm命令的支援。可以執行下面的命令檢視所有格式的支援:
[email protected]:/kong/setup# python setup.py bdist --help-formats
List of available distribution formats:
--formats=rpm RPM distribution
--formats=gztar gzip'ed tar file
--formats=bztar bzip2'ed tar file
--formats=ztar compressed tar file
--formats=tar tar file
--formats=wininst Windows executable installer
--formats=zip ZIP file
--formats=msi MicrosoftInstaller
setup函式還有一些引數:
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
指定其他的一些檔案(如配置檔案)
setup(...,
data_files=[('bitmaps',['bm/b1.gif','bm/b2.gif']),
('config',['cfg/data.cfg']),
('/etc/init.d',['init-script'])]
)
規定了哪些檔案被安裝到哪些目錄中。如果目錄名是相對路徑,則是相對於sys.prefix
或sys.exec_prefix
的路徑。如果沒有提供模板,會被新增到MANIFEST檔案中。
執行sdist命令時,預設會打包哪些東西呢?
- 所有由
py_modules
或packages
指定的原始碼檔案 - 所有由
ext_modules
或libraries
指定的C原始碼檔案 - 由
scripts
指定的指令碼檔案 - 類似於test/test*.py的檔案
- README.txt或README,setup.py,setup.cfg
- 所有
package_data
或data_files
指定的檔案
還有一種方式是寫一個manifest template,名為MANIFEST.in
,定義如何生成MANIFEST檔案,內容就是需要包含在分發包中的檔案。一個MANIFEST.in檔案如下:
include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build
setup.cfg
setup.cfg提供一種方式,可以讓包的開發者提供命令的預設選項,同時為使用者提供修改的機會。對setup.cfg的解析,是在setup.py之後,在命令列執行前。
setup.cfg檔案的形式類似於
[command]
option=value
...
其中,command
是Distutils的命令引數,option
是引數選項,可以通過python
setup.py --help build_ext
方式獲取。
需要注意的是,比如一個選項是--foo-bar,在setup.cfg中必須改成foo_bar的格式
符合Distutils2的setup.cfg有些不同。包含一些sections:
1、global
定義Distutils2的全域性選項,可能包含commands,compilers,setup_hook(定義指令碼,在setup.cfg被讀取後執行,可以修改setup.cfg的配置)
2、metadata
3、files
- packages_root:根目錄
- packages
- modules
- scripts
- extra_files
4、command sections
Setuptools
上面的setup.py和setup.cfg都是遵循python標準庫中的Distutils,而setuptools工具針對Python官方的distutils做了很多針對性的功能增強,比如依賴檢查,動態擴充套件等。很多高階功能我就不詳述了,自己也沒有用過,等用的時候再作補充。
一個典型的遵循setuptools的指令碼:
from setuptools import setup, find_packages
setup(
name ="HelloWorld",
version ="0.1",
packages = find_packages(),
scripts =['say_hello.py'],
# Project uses reStructuredText, so ensure that the docutils get
# installed or upgraded on the target machine
install_requires =['docutils>=0.3'],
package_data ={
# If any package contains *.txt or *.rst files, include them:
'':['*.txt','*.rst'],
# And include any *.msg files found in the 'hello' package, too:
'hello':['*.msg'],
},
# metadata for upload to PyPI
author ="Me",
author_email ="[email protected]",
description ="This is an Example Package",
license ="PSF",
keywords ="hello world example examples",
url ="http://example.com/HelloWorld/",# project home page, if any
# could also include long_description, download_url, classifiers, etc.
)
如何讓一個egg可被執行?
setup(
# other arguments here...
entry_points ={
'setuptools.installation':[
'eggsecutable = my_package.some_module:main_func',
]
}
)
如何定義一個可選特性?
setup(
name="Project-A",
...
extras_require ={
'PDF':["ReportLab>=1.2","RXP"],
'reST':["docutils>=0.3"],
}
)
特性如何使用呢?需要與entry points結合使用:
setup(
name="Project-A",
...
entry_points ={
'console_scripts':[
'rst2pdf = project_a.tools.pdfgen [PDF]',
'rst2html = project_a.tools.htmlgen',
# more script entry points ...
],
}
相關推薦
python 中 setup.py 使用方式
#python setup.py --help-commands Standard commands: build: build everything needed to install build_py:  
Python中__init__.py文件作用之我見
__init__.py python 在Python中每次創建一個package後都會自動生成一個 __init__.py‘空文件;該問價的作用是:聲明我們當前創建的文件夾(包)是一個**Python模塊**,在Python中每一個包中必須有一個__init__ .py文件. 一般這個文件都為空,只
python工具-setup.py
一、pip install 與 python setup.py install區別 pip install 模組名:線上安裝,會安裝相關的依賴包。 python setup.py install:下載原始碼後本地安裝,不會安裝依賴包。
也說說Python中__init__.py的作用
以一個貓狗識別的程式為例,說說__init__.py的作用。 在windows的cmd命令列中,使用下面指令把所在路徑下面的所有檔案以樹的形式列出。 tree /F > D:\tree.txt 我手頭上的一個使用knn進行貓狗分類的專案,包含有以下的檔案。
python的setup.py檔案
最近工作需要,用Cython寫了*.pyx擴充套件,並將其編譯成C檔案,最後轉換為so擴充套件,供python引用使用 distutils 編譯,建立一個setup.py 的指令碼from distutils.core import setupfrom distutils
python的setup.py檔案及其常用命令
編寫setup.py檔案,獲取幫助:python setup.py --help-commands [python] Standard commands: build build everything needed to install
python中的setup.py詳解
前言 其實對於setup.py和setup.cfg的關注是從OpenStack的原始碼包中開始的,OpenStack每個元件的釋出時都是一個tar.gz包,同樣,我們直接從github上clone程式碼後也會發現兩個檔案的存在。當閱讀Nova或Ceilometer(其
關於python中的setup.py
本文是轉載的,源地址:http://lingxiankong.github.io/blog/2013/12/23/python-setup/ 感謝作者,解決了我一個大問題 前言 其實對於setup.py和setup.cfg的關注是從OpenStack的原始碼包中開始
python中自動化部署setup.py的寫法
編寫python的第三方庫,最重要的一個工作就是編寫setup.py了,如果我們下載過一些第三庫的原始碼檔案,開啟之後一般就會有一個setup.py,執行python setup.py install 就可以安裝這個庫了。setup.py 如何編寫內容很多,可以參考官方文件:
python 編寫簡單的setup.py
ria 如何 代碼 使用 文本 highlight ttl pac 文件夾 學習python也已經有一段時間了,發現python作為腳本語言一個很重要的特點就是簡單易用,而且擁有巨多的第三方庫,幾乎方方面面的庫都有,無論你處於哪個行業,想做什麽工作,幾乎都能找到對應的第
解決安裝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.
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的作用
TE 有一個 編輯 from In 作用 SQ col clas 1、__init__.py定義包的屬性和方法 一般為空文件,但是必須存在,沒有__init__.py表明他所在的目錄只是目錄不是包 2、導入包的時候使用 例如有一個test目錄,test下
python pip安裝報錯python setup.py egg_info failed with error code 1
setup all get setup.py target pip升級 升級 col python版本 安裝locust遇到點問題折騰了好一會兒,記錄一下。 使用命令pip install locustio提示python setup.py egg_info failed
解決Python3安裝turtle提示錯誤:Command "python setup.py egg_info" failed with error code 1
pip install turtle 出現 可以選擇升級 setuptools pip install --upgrade setuptools 升級完成後,還是會出現錯誤的話,就手動選擇更改檔案 按照給定的連結,下載turtle包,手動解壓,修改setu
解決Command "python setup.py egg_info" failed with error code 問題
當執行命令時 會出現這種情況 Command "python setup.py egg_info" failed with error code 出現這種情況的話,應該是 setuptools 沒有安裝。 開啟窗口出入 cmd 命令,輸入 pip ins
python setup.py install 報錯:error: [WinError 3] 系統找不到指定的路徑。: 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\PlatformSDK\\lib
Outline 在通過 setup.py 安裝python模組時,遇到了以下報錯: # 執行 python setup.py install # 報錯: error: [WinError 3] 系統找不到指定的路徑。: 'C:\\Program Files (x86)\\Microsof
pycharm18.2.4 + Python3.7.1 安裝salt報錯python pip install salt: Command "python setup.py egg_info" failed with error code 10 及解決方法
最近在使用Python3.7.1 + pycharm + salt編寫程式中需要用到salt模組,但是在pycharm中使用pip install salt 安裝時出現錯誤: 1、提示需要 microsoft visual c++ 14.0 解決方法:可以去官網http://land
在windows上解決Command "python setup.py egg_info" fail
在windows上解決Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-vXo1W3/pycurl問題 下截PyCurl庫 下載地址:https://www.lfd.uci.edu/~gohlk