日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python: 打包发布到PyPi及踩坑经历

發布時間:2023/12/29 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python: 打包发布到PyPi及踩坑经历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經常會碰到python包要打包成sdk放到PyPi上開源的情況。

說明:
在下面準備前,還需要在pypi網站上注冊賬戶。否則無法上傳到pypi網站上。
另外,我還準備了github的賬戶,當然什么公鑰也生成了,在github上保存好,便于git操作,這里不表。

一、準備
1、setup.py文件,這個不詳述,到處都有介紹。
setup.py文件是打包發布的關鍵性文件之一。具體可以參考:

https://docs.python.org/3.8/distutils/setupscript.html#installing-additional-files

里面內容詳細,是權威的資料。

其中,我個人setup.py文件如下:

#!/usr/bin/env python #-*- coding:utf-8 -*- import os from setuptools import setup, find_packagesMAJOR =1 MINOR =0 PATCH =0 VERSION = f"{MAJOR}.{MINOR}.{PATCH}"def get_install_requires():reqs = ['pandas>=0.18.0','requests>=2.0.0','toml>=0.10' ,'pyzstd >=0.15','numpy>=1.9.2']return reqs setup(name = "dbpystream",version = VERSION,author ="songroom",author_email = "rustroom@163.com",long_description_content_type="text/markdown",url = 'https://github.com/songroom2016/dbpystream.git',long_description = open('README.md',encoding="utf-8").read(),python_requires=">=3.6",install_requires=get_install_requires(),packages = find_packages(),license = 'Apache',classifiers = ['License :: OSI Approved :: Apache Software License','Natural Language :: English','Operating System :: OS Independent','Programming Language :: Python', 'Programming Language :: Python :: 3.6','Topic :: Software Development :: Libraries :: Python Modules',],package_data={'': ['*.csv', '*.txt','.toml']}, #這個很重要include_package_data=True #也選上)

重點是,要對setup.py進行檢查,以確認模塊是否語法正確。

$ python3 setup.py check

如下:

D:\py_projects\dbpystream\> python setup.py checkrunning check

表明setup.py語法檢查通過。

需要提醒的是,如果你的包里,需要讀出原目錄中相關的.txt,csv,toml等格式文件,這個你要記得帶上。否則,打包的時侯,不會為這個進行打包。會自動忽略,當你pip后,你就會發現報錯,少了這個文件。

2、LICENSE,格式內容

通常用這個:

Copyright (c) 2018 The Python Packaging AuthorityPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE

3、README.md
這個自己整一下即可以。這個是markdown格式

5、.gitignore
整一個,這個不是必須的。是上傳github上要得到的,清爽一點。

__pycache__/ *workspace *.py[cod] build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ pip-wheel-metadata/ htmlcov/ .tox/ .nox/ .hypothesis/ .pytest_cache/ *.egg-info/ .vscode/ .*.swp .coverage .coverage.* .cache nosetests.xml coverage.xml junit*.xml *.cover MANIFEST .installed.cfg *.egg *.manifest *.spec *.log *.con *.out env.sh *-env.sh

二、打包、上傳

說明,下面命令中python3,如果有python軟鏈接到python3的,直接可以用python,不需要用python3.具體大家看情況。就不作特別說明了。

1、安裝好打包 工具

python3 -m pip install --user --upgrade setuptools wheel

2、在指定的目錄下,進行打包;打包后會生成兩個文件

python3 setup.py sdist bdist_wheel

會生成幾個文件夾,build,dist,.egg-info等。

3、上 傳pypi
(1)安裝上傳工具

python3 -m pip install --user --upgrade twine

(2)上傳pypi
有些可以試一下:

py- m twine upload dist/*

twine upload dist/*

三、各種坑

1、pip升級問題

ERROR: Could not install packages due to an OSError: [WinError 5] 拒絕訪問。: 'c:\\python310\\lib\\site-packages\\pip-21.2.3.dist-info\\entry_points.txt' Consider using the `--user` option or check the permissions.

報錯信息中推薦使用 --user 命令,

C:\Python310\python.exe -m pip install --user --upgrade pip

后面解決。

PS D:\dbpystream> pip -V pip 22.3.1 from C:\Users\****\AppData\Roaming\Python\Python310\site-packages\pip (python 3.10)

成功升級。

2、pip install 后找不到module問題

重點應放在,在沒有上傳pypi前,比如test.py是否正常(強烈建議test.py應放在\test文件夾下)。也就是說,如果在沒有上傳前,就存在找不到module的情況,上傳后,雖然已經下載成功,但仍會報“找不到module”的錯誤。

建議:
(1)、先檢查代碼是否正常。在上傳前,看看程序是不是正常,module是否正常,比如,

__init__.py #是否在文件夾中,起到module的作用。

(2)、先找樣包練下手。從github上找一個實例,看看別人封裝的代碼,自已走一下,有什么問題。如果正常,再打包自己的庫到pypi,這樣可以少踩一些坑。

3、pip install后,找不到相應的捆綁資源文件(csv,txt,toml等)

這種情況是,pip install沒問題,但是運行時會出現一些問題:
比如,

Exception: toml_file :C:\Users\aaaa\AppData\Roaming\Python\Python310\site-packages\dbpystream\method.toml does not exist!

強烈建議,不要在module中增加在指定的地址下讀取相應與module捆綁的資源性文件(csv,txt,toml),因為打包后,module的地址已經被改變了,并不是原來的module顯現結構,并不能按原來的目錄下讀取相應的文件。

經歷的坑:原來在module中用method.toml文件配置了一些信息,便于函數讀取。但是配置了各種參數后,仍不起作用,后面只能放棄。后改用method.py的方式,把相關的配置信息從toml格式,改成了dict格式。
替換后,這個仍在原來的目錄下,這樣比較方便。

4、不能上傳問題

除密碼和賬戶原因外,你需要注意:

這個在剛玩的時侯會碰到。你不能覆蓋性上傳一個文件,因為pypi不認相同的版本號的包重復上傳。你只能把version版本號往上加。

比如,原來是0.1.0的,改成0.1.1,再次上傳就OK了。

四、驗證

pip install XXXX

除檢查下載是否順利外;同時,打開python IDE,看一下運行是否正常。

import XXXX

如果各正功能如預期,證明驗證OK.

總結

以上是生活随笔為你收集整理的Python: 打包发布到PyPi及踩坑经历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。