欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?Setuptools的?setup.py實(shí)例詳解

 更新時(shí)間:2022年12月02日 08:56:08   作者:西京刀客  
setup.py是一個(gè)?python?文件,它的存在表明您要安裝的模塊/包可能已經(jīng)用?Setuptools?打包和分發(fā),這是分發(fā)?Python?模塊的標(biāo)準(zhǔn)。?它的目的是正確安裝軟件,本文給大家講解Python?Setuptools的?setup.py感興趣的朋友跟隨小編一起看看吧

Python 的 setup.py

背景

pip 是最主流的包管理方案,使用

pip install xxx

pip 無法正常下載Python模塊,或者需要在離線環(huán)境及無網(wǎng)絡(luò)環(huán)境安裝Python包的時(shí)候,可以采用安裝 .whl文件或者setup.py文件的方式。

一般的可以在下面的這個(gè)網(wǎng)站找到: https://pypi.org/

下載對(duì)應(yīng)的包的whl文件,然后執(zhí)行

 pip install XXX.whl

在安裝普通的python包時(shí),利用pip工具相當(dāng)簡(jiǎn)單。采用setup.py去構(gòu)建環(huán)境,將自己寫的模塊以及相應(yīng)的依賴庫一起打包,用setup去完成這個(gè)任務(wù)。 所以很多github代碼都提供setup.py方便我們一鍵安裝

如果您下載的軟件包在根文件夾中具有“ setup.py”,則可以通過運(yùn)行以下命令進(jìn)行安裝:

python setup.py install

如果你想安裝一個(gè)模塊但又不想安裝pip,那么唯一的選擇就是從setup.py文件安裝模塊。這可以通過python setup.py install。

什么是setup.py、setuptools

官網(wǎng):Building and Distributing Packages with Setuptools
參考URL: https://setuptools.pypa.io/en/latest/setuptools.html

setup.py是一個(gè) python 文件,它的存在表明您要安裝的模塊/包可能已經(jīng)用 Setuptools 打包和分發(fā),這是分發(fā) Python 模塊的標(biāo)準(zhǔn)。 它的目的是正確安裝軟件。

setuptools是python自帶的用來構(gòu)建包的工具,構(gòu)建出來的wheel(.whl)可供其他人pip install和import。

總之,setuptools就是比distutils好用的多,基本滿足大型項(xiàng)目的安裝和發(fā)布!

一個(gè)最基本的”setup.py”文件如下:

#coding:utf8
from setuptools import setup
setup(
   name='MyApp',        # 項(xiàng)目名
   version='1.0',       # 版本號(hào)
   packages=['myapp']   # 包括在安裝包內(nèi)的Python包
)

什么是setuptools

setuptools官方文檔:https://setuptools.readthedocs.io

distutils 是標(biāo)準(zhǔn)庫中負(fù)責(zé)建立 Python 第三方庫的安裝器,使用它能夠進(jìn)行 Python 模塊的安裝和發(fā)布。

setuptools 是 distutils 增強(qiáng)版,不包括在標(biāo)準(zhǔn)庫中。其擴(kuò)展了很多功能,能夠幫助開發(fā)者更好的創(chuàng)建和分發(fā) Python 包。大部分 Python 用戶都會(huì)使用更先進(jìn)的 setuptools 模塊。

Setuptools 提供一流的setup.py文件支持作為配置機(jī)制。setup.py 調(diào)用了 setuptools 包中的setup方法。

然而,重要的是要記住,強(qiáng)烈建議不要將此文件作為腳本(例如)運(yùn)行,并且大多數(shù)命令行界面已經(jīng)(或?qū)⒁売?(例如,…)。python setup.py sdistpython setup.py installpython setup.py bdist_wininst

** 我們還建議用戶通過pyproject.tomlsetup.cfg以更具聲明性的方式公開盡可能多的配置,并僅使用動(dòng)態(tài)部分保持最小化(如果適用,甚至完全省略)**。setup.py有關(guān)更多背景信息,請(qǐng)參閱為什么不應(yīng)該直接調(diào)用 setup.py

setup.py命令

查看所有支持的命令:

python setup.py --help-commands

構(gòu)建安裝時(shí)所需的所有內(nèi)容:

python setup.py build

安裝包到系統(tǒng)環(huán)境中。該命令會(huì)將當(dāng)前項(xiàng)目安裝到當(dāng)前Python環(huán)境的”site-packages”目錄下,這樣其他項(xiàng)目就可以像導(dǎo)入標(biāo)準(zhǔn)庫一樣導(dǎo)入該項(xiàng)目的代碼了。

python setup.py install

以開發(fā)方式安裝包:
如果項(xiàng)目在開發(fā)過程中會(huì)頻繁變更,每次安裝還需要先將原來的版本卸掉,會(huì)很麻煩。使用”develop”開發(fā)方式安裝的話,項(xiàng)目代碼不會(huì)真的被拷貝到本地Python環(huán)境的”site-packages”目錄下,而是在”site-packages”目錄里創(chuàng)建一個(gè)指向當(dāng)前項(xiàng)目位置的鏈接。這樣如果當(dāng)前位置的源碼被改動(dòng),就會(huì)馬上反映到”site-packages”里。

python setup.py develop

用于包的上傳發(fā)布:

python setup.py register

setup.py內(nèi)容 生成可執(zhí)行文件的分發(fā)(安裝到指定路徑)

參考URL: https://amir.rachum.com/blog/2017/07/28/python-entry-points/

網(wǎng)上demo:

# 用來支持自動(dòng)生成腳本,安裝后會(huì)自動(dòng)生成 /usr/bin/pmm 的可執(zhí)行文件(windows管理員權(quán)限下會(huì)在Python文件夾的script里面生成pmm.exe)
# 該文件入口指向 pimm/pimm_module.py 的main 函數(shù)
entry_points={'console_scripts': ['pmm=pimm.pimm_module:main']},
 
# 將 bin/foo.sh 和 bar.py 腳本,生成到系統(tǒng) PATH中
# 執(zhí)行 python setup.py install 后
# 會(huì)生成 如 /usr/bin/foo.sh 和 如 /usr/bin/bar.py
scripts=['bin/foo.sh', 'bar.py']

將python模塊轉(zhuǎn)變?yōu)槊钚泄ぞ?
如果我們希望 module 中的函數(shù)不僅僅只是被其他 python 程序通過 import 調(diào)用,還可以直接在命令行中執(zhí)行,那么可以做如下修改:(設(shè)置參數(shù)entry_points里的’console_scripts’)

# greeting_module.py
import pyjokes

def greeting_func(name):
    print("Hello,", name)
    print("Here is a joke for you:\n", pyjokes.get_joke())

def main():
    import sys
    arg = sys.argv[1]
    greeting_func(arg)
# setup.py 
from setuptools import setup, find_packages

setup(
	# ...,
    entry_points={       # 設(shè)置了在命令行中如何使用greeting_module中的main函數(shù)
        'console_scripts': [
            'greeting=greeting_pkg.greeting_module:main'	# <command>=<package>.<module>:<function>
        ]
    }
)

引入非Python文件

如果想引入靜態(tài)文件,如JS、CSS、圖片等,怎么做?
在項(xiàng)目根目錄下添加一個(gè)”MANIFEST.in”文件夾。假設(shè)我們把所有靜態(tài)文件都放在”static”子目錄下,

我們?cè)谇鍐挝募?rdquo;MANIFEST.in”中,列出想要在包內(nèi)引入的目錄路徑:

recursive-include myapp/static *
recursive-include myapp/xxx *

recursive-include表明包含子目錄。

在”setup.py”中將include_package_data參數(shù)設(shè)為True:

#coding:utf8
from setuptools import setup
setup(
   name='MyApp',        # 項(xiàng)目名
   version='1.0',# 版本號(hào)
   packages=['myapp'],  # 包括在安裝包內(nèi)的Python包
   include_package_data=True   # 啟用清單文件MANIFEST.in
)

如果你想排除一部分文件,可以在”setup.py”中使用exclude_package_date參數(shù):

setup(
    ...
    include_package_data=True, # 啟用清單文件MANIFEST.in
    exclude_package_date={'':['.gitignore']}
)

依賴管理

我們的項(xiàng)目會(huì)依賴其他Python模塊,如何在setup.py中管理這些依賴呢?

修改”setup.py”文件,加入install_requires參數(shù):

#coding:utf8
from setuptools import setup
setup(
   name='MyApp',        # 項(xiàng)目名
   version='1.0',# 版本號(hào)
   packages=['myapp'],  # 包括在安裝包內(nèi)的Python包
   include_package_data=True,   # 啟用清單文件MANIFEST.in
   exclude_package_date={'':['.gitignore']},
   install_requires=[   # 依賴列表
       'Flask>=0.10',
       'Flask-SQLAlchemy>=1.5,<=2.1'
   ]
)

可以通過dependency_links指定依賴包下載路徑。install_requires中的包在安裝時(shí)會(huì)先去PyPI下載并安裝,如果包在PyPI中找不到,則會(huì)從dependency_links標(biāo)識(shí)的URL中獲取:

setup(
   ...
   install_requires=[   # 依賴列表
       'Flask>=0.10',
       'Flask-SQLAlchemy>=1.5,<=2.1'
   ],

   dependency_links=[   # 依賴包下載路徑
       'http://example.com/dependency.tar.gz'
   ]
)

路徑應(yīng)指向一個(gè)”egg”包或”tar.gz”包,也可以是個(gè)包含下載地址(一個(gè)”egg”包或”tar.gz”包)的頁面。

編寫 setup.py 文件, setup.py是python模塊分發(fā)與安裝的指導(dǎo)文件。
有了setup.py文件,運(yùn)行下面這條命令,可以進(jìn)行模塊的安裝。
與 .whl文件一樣,先cmd到指定位置,然后輸入:

python setup.py install

安裝

$ pip install setuptools

到此這篇關(guān)于Python Setuptools的 setup.py的文章就介紹到這了,更多相關(guān)Python setup.py內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python numpy 提取矩陣的某一行或某一列的實(shí)例

    Python numpy 提取矩陣的某一行或某一列的實(shí)例

    下面小編就為大家分享一篇Python numpy 提取矩陣的某一行或某一列的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python使用pyecharts控件繪制圖表

    Python使用pyecharts控件繪制圖表

    這篇文章介紹了Python使用pyecharts控件繪制圖表的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Python交互環(huán)境下打印和輸入函數(shù)的實(shí)例內(nèi)容

    Python交互環(huán)境下打印和輸入函數(shù)的實(shí)例內(nèi)容

    在本篇文章里小編給大家分享的是關(guān)于Python交互環(huán)境下打印和輸入函數(shù)的實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • Python地圖繪制實(shí)操詳解

    Python地圖繪制實(shí)操詳解

    在本文里我們給大家介紹了用Python繪制地圖的知識(shí)點(diǎn)以及詳細(xì)步驟,需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03
  • Python設(shè)計(jì)模式中的狀態(tài)模式你了解嗎

    Python設(shè)計(jì)模式中的狀態(tài)模式你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Python設(shè)計(jì)模式中的狀態(tài)模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 使用scipy.optimize的fsolve,root函數(shù)求解非線性方程問題

    使用scipy.optimize的fsolve,root函數(shù)求解非線性方程問題

    這篇文章主要介紹了使用scipy.optimize的fsolve,root函數(shù)求解非線性方程問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python檢測(cè)一個(gè)對(duì)象是否為字符串類的方法

    Python檢測(cè)一個(gè)對(duì)象是否為字符串類的方法

    這篇文章主要介紹了Python檢測(cè)一個(gè)對(duì)象是否為字符串類的方法,即檢測(cè)是一個(gè)對(duì)象是否是字符串對(duì)象,本文還講解了一個(gè)有趣的判斷方法,需要的朋友可以參考下
    2015-05-05
  • 用Python解決計(jì)數(shù)原理問題的方法

    用Python解決計(jì)數(shù)原理問題的方法

    計(jì)數(shù)原理是數(shù)學(xué)中的重要研究對(duì)象之一,分類加法計(jì)數(shù)原理、分步乘法計(jì)數(shù)原理是解決計(jì)數(shù)問題的最基本、最重要的方法,也稱為基本計(jì)數(shù)原理,它們?yōu)榻鉀Q很多實(shí)際問題提供了思想和工具。本文教大家怎么用Python解決在數(shù)學(xué)中遇到的計(jì)數(shù)原理問題。
    2016-08-08
  • Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript

    Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript

    爬蟲的開發(fā)過程中,往往需要對(duì)JS進(jìn)行模擬,簡(jiǎn)單或者通用的還可以在Python中模擬或者找到對(duì)應(yīng)的第三方庫,但是復(fù)雜的就可能不好實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • python解析xml模塊封裝代碼

    python解析xml模塊封裝代碼

    這篇文章主要分享下在python中解析xml文件的模塊用法,以及對(duì)模塊封裝的方法,有需要的朋友參考下
    2014-02-02

最新評(píng)論