日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python?Setuptools的?setup.py實例詳解_python

作者:西京刀客 ? 更新時間: 2022-12-29 編程語言

Python 的 setup.py

背景

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

pip install xxx

pip 無法正常下載Python模塊,或者需要在離線環境及無網絡環境安裝Python包的時候,可以采用安裝 .whl文件或者setup.py文件的方式。

一般的可以在下面的這個網站找到: https://pypi.org/

下載對應的包的whl文件,然后執行

 pip install XXX.whl

在安裝普通的python包時,利用pip工具相當簡單。采用setup.py去構建環境,將自己寫的模塊以及相應的依賴庫一起打包,用setup去完成這個任務。 所以很多github代碼都提供setup.py方便我們一鍵安裝

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

python setup.py install

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

什么是setup.py、setuptools

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

setup.py是一個 python 文件,它的存在表明您要安裝的模塊/包可能已經用 Setuptools 打包和分發,這是分發 Python 模塊的標準。 它的目的是正確安裝軟件。

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

總之,setuptools就是比distutils好用的多,基本滿足大型項目的安裝和發布!

一個最基本的”setup.py”文件如下:

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

什么是setuptools

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

distutils 是標準庫中負責建立 Python 第三方庫的安裝器,使用它能夠進行 Python 模塊的安裝和發布。

setuptools 是 distutils 增強版,不包括在標準庫中。其擴展了很多功能,能夠幫助開發者更好的創建和分發 Python 包。大部分 Python 用戶都會使用更先進的 setuptools 模塊。

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

然而,重要的是要記住,強烈建議不要將此文件作為腳本(例如)運行,并且大多數命令行界面已經(或將要)棄用 (例如,…)。python setup.py sdistpython setup.py installpython setup.py bdist_wininst

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

setup.py命令

查看所有支持的命令:

python setup.py --help-commands

構建安裝時所需的所有內容:

python setup.py build

安裝包到系統環境中。該命令會將當前項目安裝到當前Python環境的”site-packages”目錄下,這樣其他項目就可以像導入標準庫一樣導入該項目的代碼了。

python setup.py install

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

python setup.py develop

用于包的上傳發布:

python setup.py register

setup.py內容 生成可執行文件的分發(安裝到指定路徑)

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

網上demo:

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

將python模塊轉變為命令行工具:
如果我們希望 module 中的函數不僅僅只是被其他 python 程序通過 import 調用,還可以直接在命令行中執行,那么可以做如下修改:(設置參數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={       # 設置了在命令行中如何使用greeting_module中的main函數
        'console_scripts': [
            'greeting=greeting_pkg.greeting_module:main'	# <command>=<package>.<module>:<function>
        ]
    }
)

引入非Python文件

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

我們在清單文件”MANIFEST.in”中,列出想要在包內引入的目錄路徑:

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

recursive-include表明包含子目錄。

在”setup.py”中將include_package_data參數設為True:

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

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

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

依賴管理

我們的項目會依賴其他Python模塊,如何在setup.py中管理這些依賴呢?

修改”setup.py”文件,加入install_requires參數:

#coding:utf8
from setuptools import setup
setup(
   name='MyApp',        # 項目名
   version='1.0',# 版本號
   packages=['myapp'],  # 包括在安裝包內的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中的包在安裝時會先去PyPI下載并安裝,如果包在PyPI中找不到,則會從dependency_links標識的URL中獲取:

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

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

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

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

python setup.py install

安裝

$ pip install setuptools

原文鏈接:https://blog.csdn.net/inthat/article/details/128078724

欄目分類
最近更新