網站首頁 編程語言 正文
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.toml
或 setup.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
相關推薦
- 2023-08-13 ps打開之后切圖一段時間C盤存儲量變小怎么清理?
- 2022-06-14 Flutter網絡請求Dio庫的使用及封裝詳解_Android
- 2022-08-26 Redis哨兵模式實現一主二從三哨兵_Redis
- 2022-07-04 解決Python保存文件名太長OSError:?[Errno?36]?File?name?too?l
- 2022-04-10 el-table中使用el-select,選擇后不刷新解決方法
- 2022-04-23 Android自定義View實現數字雨效果的全過程_Android
- 2023-04-01 c++實現堆排序的示例代碼_C 語言
- 2022-03-29 python實現矩陣乘法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支