什么是setup.py?
誰能解釋一下, setup.py是什么,如何配置或使用它?
#1樓
setup.py是一個python文件,通常告訴您要安裝的模塊/軟件包已與Distutils打包并分發,Distutils是分發Python模塊的標準。
這使您可以輕松安裝Python軟件包。 通常寫就足夠了:
$ pip install .pip將使用setup.py安裝模塊。 避免直接調用setup.py 。
https://docs.python.org/3/installing/index.html#installing-index
#2樓
如果您下載的軟件包在根文件夾中具有“ setup.py”,則可以通過運行以下命令進行安裝
python setup.py install如果您正在開發項目,并且想知道此文件的用途,請查看有關編寫安裝腳本的Python文檔。
#3樓
setup.py是Python腳本,通常隨該語言編寫的庫或程序一起提供。 目的是正確安裝軟件。
許多軟件包將distutils框架與setup.py結合使用。
http://docs.python.org/distutils/
#4樓
setup.py是Python對多平臺安裝程序和make文件的回答。
如果您熟悉命令行安裝,則將make && make install轉換為python setup.py build && python setup.py install 。
一些軟件包是純Python,并且僅按字節編譯。 其他可能包含本機代碼,這將需要本機編譯器(如gcc或cl )和Python接口模塊(如swig或pyrex )。
#5樓
setup.py可以在兩種情況下使用:首先,您要安裝Python軟件包。 其次,您要創建自己的Python包。 通常,標準的Python軟件包具有幾個重要文件,例如setup.py,setup.cfg和Manifest.in。 當您創建Python軟件包時,這三個文件將確定(egg-info文件夾下PKG-INFO中的內容)名稱,版本,描述,其他所需的安裝(通常在.txt文件中)以及其他幾個參數。 創建包時setup.py讀取setup.cfg(可以是tar.gz)。 在Manifest.in中,您可以定義應包含在軟件包中的內容。 無論如何,您都可以使用setup.py做很多事情,例如
python setup.py build python setup.py install python setup.py sdist <distname> upload [-r urltorepo] (to upload package to pypi or local repo)還有許多其他命令可以與setup.py一起使用。 求助
python setup.py --help-commands#6樓
使用setup.py下載軟件包時,請打開“終端”(Mac,Linux)或“命令提示符”(Windows)。 使用cd并使用Tab鍵幫助您將路徑設置為已下載文件的文件夾以及setup.py :
iMac:~ user $ cd path/pakagefolderwithsetupfile/按Enter鍵,您應該會看到類似以下內容:
iMac:pakagefolderwithsetupfile user$然后在此python setup.py install之后鍵入:
iMac:pakagefolderwithsetupfile user$ python setup.py install按enter 。 做完了!
#7樓
要安裝已下載的Python軟件包,請提取檔案并在其中運行setup.py腳本:
python setup.py install對我來說,這一直很奇怪。 將軟件包管理器指向下載位置會更自然,例如在Ruby和Nodejs中。 gem install rails-4.1.1.gem
包管理器也更舒適,因為它既熟悉又可靠。 另一方面,每個setup.py都是新穎的,因為它特定于軟件包。 它要求遵守慣例“我相信此setup.py與過去使用的命令相同”。 這是對精神意志力的遺憾。
我并不是說setup.py工作流不如軟件包管理器安全(我知道Pip只是在內部運行setup.py),但是我肯定覺得這很麻煩。 將所有命令都發送到同一個程序包管理器應用程序是一種和諧。 您甚至可能會喜歡它。
#8樓
它有助于在計算機上安裝python軟件包foo (也可以在virtualenv ),以便您可以從其他項目以及[I] Python提示符中導入foo軟件包。
它執行pip , easy_install等類似的工作,
使用setup.py
讓我們從一些定義開始:
軟件包 -包含__init__.py文件的文件夾/目錄。
模塊 -擴展名為.py有效python文件。
分發 -一個軟件包與其他軟件包和模塊的關系 。
假設您要安裝一個名為foo的軟件包。 那你做
$ git clone https://github.com/user/foo $ cd foo $ python setup.py install相反,如果您不想實際安裝它,但仍然想使用它。 然后做,
$ python setup.py develop此命令將在站點包內創建到源目錄的符號鏈接,而不是復制內容。 因此,它非???#xff08;特別是對于大包裝)。
創建setup.py
如果您有類似的打包樹,
foo ├── foo │?? ├── data_struct.py │?? ├── __init__.py │?? └── internals.py ├── README ├── requirements.txt └── setup.py然后,在setup.py腳本中執行以下操作,以便可以將其安裝在某些計算機上:
from setuptools import setupsetup(name='foo',version='1.0',description='A useful module',author='Man Foo',author_email='foomail@foo.com',packages=['foo'], #same as nameinstall_requires=['bar', 'greek'], #external packages as dependencies )相反,如果您的程序包樹像下面這樣更復雜:
foo ├── foo │?? ├── data_struct.py │?? ├── __init__.py │?? └── internals.py ├── README ├── requirements.txt ├── scripts │?? ├── cool │?? └── skype └── setup.py然后,您的setup.py在這種情況下將像:
from setuptools import setupsetup(name='foo',version='1.0',description='A useful module',author='Man Foo',author_email='foomail@foo.com',packages=['foo'], #same as nameinstall_requires=['bar', 'greek'], #external packages as dependenciesscripts=['scripts/cool','scripts/skype',] )向( setup.py )添加更多內容并使其得體:
from setuptools import setupwith open("README", 'r') as f:long_description = f.read()setup(name='foo',version='1.0',description='A useful module',license="MIT",long_description=long_description,author='Man Foo',author_email='foomail@foo.com',url="http://www.foopackage.com/",packages=['foo'], #same as nameinstall_requires=['bar', 'greek'], #external packages as dependenciesscripts=['scripts/cool','scripts/skype',] )在long_description中, long_description用作軟件包的自述文件描述。
最后,您現在可以將軟件包上傳到PyPi.org,以便其他人可以使用pip install yourpackage來pip install yourpackage 。
第一步是使用以下方法在pypi中聲明您的軟件包名稱和空間:
$ python setup.py register注冊您的包裹名稱后,任何人都無法聲明或使用它。 成功注冊后,您必須通過以下方式將軟件包上傳到云(到云):
$ python setup.py upload您也可以選擇通過以下方式使用GPG對包裹進行簽名:
$ python setup.py --sign upload獎勵 :查看示例setup.py這里離一個真正的項目: torchvision-setup.py
#9樓
為簡單"__main__"當您調用安裝函數并提到其他答案時,setup.py將以"__main__"運行。 在setup.py內部,應該放置安裝軟件包所需的一切。
常用的setup.py功能
以下兩節討論了許多setup.py模塊具有的兩件事。
setuptools.setup
此功能允許您指定項目屬性,例如項目名稱,版本。...最重要的是,如果其他功能打包正確,此功能將允許您安裝其他功能。 請參閱此網頁以獲取setuptools.setup的示例。
使用setuptools.setup的這些屬性可以安裝以下類型的軟件包:
使用setuptools.findpackages導入到項目并在PyPI中列出的軟件包 :
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
軟件包不在PyPI中 ,但可以使用dependency_links從URL下載
dependency_links=["http://peak.telecommunity.com/snapshots/",]
自定義功能
在理想的情況下, setuptools.setup將為您處理所有事情。 不幸的是,情況并非總是如此。 有時,您需要做一些特定的事情,例如使用subprocess命令安裝依賴項,以使要安裝的系統處于正確的軟件包狀態。 嘗試避免這種情況,這些功能會造成混亂,并且在OS甚至發行版之間通常會有所不同。
#10樓
setup.py是一個與其他文件一樣的Python文件。 它可以采用任何名稱,除非按照慣例將其命名為setup.py以便每個腳本沒有不同的過程。
最常用的setup.py用于安裝Python模塊,但用于服務器其他目的:
模塊:
也許這是setup.py最著名的用法在模塊中。 盡管可以使用pip進行安裝,但默認情況下,舊的Python版本不包含pip ,因此需要單獨安裝。
如果您想安裝模塊但不想安裝pip ,則唯一的選擇是從setup.py文件安裝模塊。 這可以通過python setup.py install來實現。 這會將Python模塊安裝到根字典(不帶pip , easy_install ect)。
當pip失敗時,通常使用此方法。 例如,如果所需軟件包的正確Python版本無法通過pip也許是因為不再維護,則下載源代碼并運行python setup.py install將執行相同的操作,除非需要編譯二進制文件,(但會忽略Python版本-除非返回錯誤)。
setup.py另一個用途是從源代碼安裝軟件包。 如果模塊仍在開發中,則將無法使用wheel文件,并且唯一的安裝方法是直接從源代碼進行安裝。
構建Python擴展:
構建模塊后,可以使用distutils安裝腳本將其轉換為可分發的模塊。 一旦構建完成,就可以使用上面的命令進行安裝。
安裝腳本易于構建,一旦文件已正確配置,就可以通過運行python setup.py build進行編譯(請參閱所有命令的鏈接)。
為了易于使用并按照慣例,它再次被命名為setup.py ,但是可以使用任何名稱。
Cython:
setup.py文件的另一種著名用法包括編譯后的擴展名。 這些需要具有用戶定義值的安裝腳本。 它們允許快速執行(但一旦編譯則依賴平臺)。 這是文檔中的一個簡單示例:
from distutils.core import setup from Cython.Build import cythonizesetup(name = 'Hello world app',ext_modules = cythonize("hello.pyx"), )這可以通過python setup.py build進行編譯
Cx_Freeze:
需要安裝腳本的另一個模塊是cx_Freeze 。 這會將Python腳本轉換為可執行文件。 這允許包括描述,名稱,圖標,軟件包在內的許多命令包括,排除等,并且一旦運行將產生可分發的應用程序。 文檔中的示例:
import sys from cx_Freeze import setup, Executable build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]} base = None if sys.platform == "win32":base = "Win32GUI"setup( name = "guifoo",version = "0.1",description = "My GUI application!",options = {"build_exe": build_exe_options},executables = [Executable("guifoo.py", base=base)])可以通過python setup.py build進行編譯。
那么什么是setup.py文件?
很簡單,它是一個在Python環境中構建或配置某些東西的腳本。
分發時,程序包應僅包含一個安裝腳本,但將多個腳本組合成一個安裝腳本并不少見。 注意,這通常涉及distutils但并不總是如此(如我在上一個示例中所示)。 要記住的事情是以某種方式配置Python包/腳本。
它使用名稱,因此在構建或安裝時始終可以使用相同的命令。
總結
以上是生活随笔為你收集整理的什么是setup.py?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯qq的发展史
- 下一篇: Google android marke