参考出处:https://segmentfault.com/a/1190000008663126
参考:http://blog.csdn.net/xluren/article/details/41115045
https://www.cnblogs.com/lazyboy/p/3830104.html
PS:由于网上讲的有些地方比较笼统,特地发表此文章具体描述。
上传前的注意事项
-
假设你的包已经开发完成,并且根目录必须要有一个setup.py。
-
最好有一个README.rst 用来描述你的轮子,虽然这不是必须的,但文档就像内裤,你最好还是要有的。
-
如果你需要打包代码文件夹以外的文件,比如版权信息等等,你还需要写一个 MANIFEST.in。
关于setup.py
的补充说明
-
name
必须是唯一的,允许使用数字和字母,推荐使用中划线(-)而不是下划线(_),因为pip安装只支持中划线,比如pip install my-pkg
,为了不给自己找麻烦请听话。 -
version
推荐遵循语义化版本号规则,简单说就像这样:1.2.0 -
作者姓名和邮箱地址不一定要和你的PyPI账号一致。
测试本地打包命令
如果上面的都没问题,在本地目录执行以下命令应该能成功在dist目录下生成*.tar.gz的包文件。
python setup.py sdist
setup.py 内容为:需放在要打包的项目的根目录下。
setup.py 代码如下:
from setuptools import setup, find_packages setup( name='interface_demo', version='1.0.0', description='just for test', classifiers=[ 'License :: OSI Approved :: MIT License', 'Programming Language :: Python', 'Intended Audience :: Developers', 'Operating System :: OS Independent', ], install_requires=[], # install_requires字段可以列出依赖的包信息,用户使用pip或easy_install安装时会自动下载依赖的包 author='songq001', url='https://github.com', author_email='284440954@qq.com', license='MIT', packages=find_packages(), # 需要处理哪里packages,当然也可以手动填,例如['pip_setup', 'pip_setup.ext'] include_package_data=False, zip_safe=True, )
上传并发布包文件到PyPI
创建 PyPI账号
非常简单,直接通过官网注册 https://pypi.python.org/pypi?..., 但是需要验证邮件并确认激活。
创建用户验证文件 ~/.pypirc
在自己的用户目录下新建一个空白文件命名为.pypirc
,内容如下:
[distutils]
index-servers=pypi
[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>
用户名和密码就是上一步骤所创建的,直接明文输入。如果你觉得明文密码不安全也可以留空,在后面的上传过程中会提示你手动输入。
此处特地说明:创建.pypirc 的目录为:C:\Users\xxx-q001(你的计算机名)。创建时可以先创建一个txt文件,填入响应内容后修改文件名。
修改时改为.pypirc.保存即可。 注意后面一定要加一个.
注册你的包
你需要到PyPI注册并验证你的包,之后才能开始真正上传,注册的方式有以下几种。
-
使用命令
python setup.py register
,最简单但官网不推荐,因为使用的是HTTP未加密,有可能会被攻击人嗅探到你的密码。 -
通过PyPI网站提交表单完成注册验证。
-
安装
pip install twine
然后在通过命令twine register dist/mypkg.whl
完成注册。
注册时cmd内容:
C:\Users\xxx>python D:\python\interface_demo\setup.py register
running register
running egg_info
creating interface_demo.egg-info
writing interface_demo.egg-info\PKG-INFO
writing top-level names to interface_demo.egg-info\top_level.txt
writing dependency_links to interface_demo.egg-info\dependency_links.txt
writing manifest file 'interface_demo.egg-info\SOURCES.txt'
warning: manifest_maker: standard file 'setup.py' not found
reading manifest file 'interface_demo.egg-info\SOURCES.txt'
writing manifest file 'interface_demo.egg-info\SOURCES.txt'
running check
We need to know who you are, so please choose either:
1. use your existing login,
2. register as a new user,
3. have the server generate a new password for you (and email it to you), or
4. quit
Your selection [default 1]:
1
Username: xxxx
Password:
Registering interface_demo to https://upload.pypi.org/legacy/
Server response (410): Project pre-registration is no longer required or supported, so continue directly to uploading files.
上传并完成发布
你可以任选以下两种方式之一发布你的轮子。
-
使用命令:
python setup.py sdist upload
,还是和上面一样,最简单但是有安全隐患。 -
使用 twine:
twine upload dist/*
上传成功cmd内容:
C:\Users\xxxx>python D:\python\interface_demo\setup.py sdist upload
running sdist
running egg_info
writing interface_demo.egg-info\PKG-INFO
writing top-level names to interface_demo.egg-info\top_level.txt
writing dependency_links to interface_demo.egg-info\dependency_links.txt
warning: manifest_maker: standard file 'setup.py' not found
reading manifest file 'interface_demo.egg-info\SOURCES.txt'
writing manifest file 'interface_demo.egg-info\SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.rst, README.txt
running check
creating interface_demo-1.0.0
creating interface_demo-1.0.0\interface_demo.egg-info
copying files to interface_demo-1.0.0...
copying interface_demo.egg-info\PKG-INFO -> interface_demo-1.0.0\interface_demo.egg-info
copying interface_demo.egg-info\SOURCES.txt -> interface_demo-1.0.0\interface_demo.egg-info
copying interface_demo.egg-info\dependency_links.txt -> interface_demo-1.0.0\interface_demo.egg-info
copying interface_demo.egg-info\top_level.txt -> interface_demo-1.0.0\interface_demo.egg-info
copying interface_demo.egg-info\zip-safe -> interface_demo-1.0.0\interface_demo.egg-info
Writing interface_demo-1.0.0\setup.cfg
Creating tar archive
removing 'interface_demo-1.0.0' (and everything under it)
running upload
Submitting dist\interface_demo-1.0.0.tar.gz to https://upload.pypi.org/legacy/
Server response (200): OK
管理你的包
如果你的包已经上传成功,那么当你登录PyPI网站后应该能在右侧导航栏看到管理入口。
点击包名进去后你可以对你的包进行管理,当然你也可以从这里删除这个包。
让别人使用你的包
包发布完成后,其他人只需要使用pip就可以安装你的包文件。比如:
pip install package-name
如果你更新了包,别人可以可以通过--update
参数来更新:
pip install package-name --update
可能遇到的错误
Upload failed (403): Invalid or non-existent authentication information.
错误的用户验证信息,你需要创建一个用户验证文件 ~/.pypirc
。请参阅上文。
Upload failed (403): You are not allowed to edit 'xxx' package information
你需要先注册你的包才可以开始上传,运行注册命令:python setup.py register
Server response (401): Incomplete registration; check your email
你的PyPI账户还没完成邮箱验证,你需要去注册邮箱找到一封验证邮件完成验证后再重试失败的步骤。
Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"
你的setup.py文件中的classifier信息有误,请按官网的正确分类书写classifier.
error: No dist file created in earlier command
你还没打包就开始了上传命令,建议打包和上传的操作放在一起做,比如:
python setup sdist upload
error: Upload failed (499): Client Disconnected
这应该是网络问题,多重试几次。
Upload failed (400): File already exists
文件已经存在了,你每一次上次都应该更新版本号。
=======================
现在来说一下打包成whl文件操作:
可参考:http://blog.sina.com.cn/s/blog_1318255b00102wbtz.html
具体要比参考地址简单。
首先做好准备工作,即在需要打包的工程根目录下添加setup.py,和前面说的setup.py内容一致。
之后cmd模式进入setup.py目录。
打包成whl命令。
pip wheel --wheel-dir=my_wheels D:\python\interface_demo\z_test (此处放入你需要打包的工程路径即可--如图我要打包的是z_test工程)
其中--wheel-dir=my_wheels 是打包存储的路径,可以具体设置。如果不是绝对路径,则默认是在C:\Users\xxxx1下建文件夹。
EG:
pip wheel --wheel-dir=D:\other\my_wheels D:\python\interface_demo\z_test
cmd: python setup.py bdist_wheel
C:\Users\xxx1>pip wheel --wheel-dir=D:\other\my_wheels D:\python\interface_demo\z_test
Processing d:\python\interface_demo\z_test
Building wheels for collected packages: z-test
Running setup.py bdist_wheel for z-test ... done
Stored in directory: d:\other\my_wheels
Successfully built z-test
提示Successfully built z-test则打包成功了。
此时传入自己本地tomcat即可实现局域网共享使用。
安装操作:pip install http://localhost:8080/z_test-1.0.0-py2-none-any.whl (此处为你的whl文件所在绝对路径,此处我的已经上传tomcat服务器,可以直接从服务器上下载安装)
相关推荐
在Python生态系统中,开发者通常会将他们的项目打包成`.whl`文件,以便于其他人通过`pip install`命令快速安装。`.whl`文件包含了编译好的Python模块,这使得在不同平台上安装变得简单且高效,避免了因编译源代码...
"sigopt_python-0.5.0-py2-none-any.whl"是PyPI上发布的其中一个Python库的打包文件,下面我们将深入探讨这个文件及其相关的知识点。 首先,`whl`文件是Python的 Wheel 格式,它是Python的一种二进制分发格式。这种...
资源全名:thoth_python-0.14.0-py3-none-any.whl”,意味着这个文件是从PyPI官方源下载的,是thoth_python库的安装包,且是一个已经打包好的二进制格式,称为轮子文件(wheel)。轮子文件是Python的一种预编译的包...
描述中提到的"资源来自pypi官网,解压后可用"表明这个文件是通过PyPI官方渠道发布的,遵循Python的打包规范,通常是一个可直接安装的轮子(wheel)文件。轮子文件是一种预编译的Python软件包格式,相比源码包,它能...
.whl文件是Python的Wheel格式,是Python Package Index (PyPI)上常见的一种分发方式,它可以避免构建过程,提高安装速度。 压缩包子文件的文件名称列表包括: 1. 使用说明.txt:这通常是一个文本文件,包含了如何...
标题 "Aries_Python-0.1.328-py3-none-any.whl.zip" 暗示了这是一个Python库的压缩包,名为"Aries_Python",版本号为0.1.328,它被打包成`.whl`格式。`.whl`文件是Python的轮子(Wheel)格式,它是预编译的Python包...
在Python世界中,通常会将Python库打包成.tar.gz或.whl等格式上传到PyPI,用户可以通过pip工具进行安装。在这个案例中,".tar.gz"文件可能包含了Python库的源代码、元数据以及必要的文档。用户可以通过解压这个文件...
标题 "Aries_Python-0.1.294-py3-none-any.whl.zip" 暗示了这是一个Python库的压缩包,名为"Aries_Python",版本号为0.1.294,它被打包成了一种特定格式的文件——.whl。.whl文件是Python中的轮子文件(Wheel File)...
`transformers-4.7.0-py3-none-any.whl`这个文件名揭示了它是一个经过打包的Python轮子(wheel)文件,是Python社区推荐的一种二进制分发格式,能方便用户快速安装和使用。 `transformers`库是由Hugging Face团队...
它是一个存储库,包含了无数的开源Python项目,这些项目通常被打包成易于分发和安装的形式,如.tar.gz或.whl文件。当开发者上传一个Python包到PyPI时,其他人可以通过pip(Python的包管理器)轻松地将其安装到自己的...
标题中的"Aries_Python-0.1.323-py3-none-any.whl.zip"是一个Python库的压缩包文件,版本号为0.1.323,它被打包成`.whl`格式,然后进一步压缩为`.zip`文件。`.whl`是Python的一种二进制分发格式,用于简化Python包的...
标题中的"PyPI 官网下载 | satyrn-python-0.6.3.tar.gz"指的是一个从PyPI官方获取的名为“satyrn-python”的Python库的版本0.6.3,该库被压缩为tar.gz格式的文件。 tar.gz是一种常见的文件打包和压缩格式,它结合了...
Python库“eaves_python-0.1.1-py3-none-any.whl”是一个用于Python开发的可执行包,遵循Python的打包规范。这个压缩包是Python的wheel格式,它是Python包的一种二进制分发格式,使得安装过程更加简单快捷。在Python...
5. **打包**:通过执行`python setup.py sdist`命令,将源代码打包成`.tar.gz`或`.whl`格式的归档文件,以便于分发。 6. **上传到PyPI**:使用twine工具安全地将打包好的文件上传到PyPI,其他用户就可以通过pip安装...
- **上传到PyPI**:如果希望其他人也能使用这个包,可以将WHL文件上传到PyPI,然后其他人通过`pip install package_name`即可安装。 4. **注意事项** - 检查源码的`setup.py`文件,确保它正确指定了包的元数据和...
**PyPI(Python Package Index)**是Python社区官方的软件包仓库,它是Python开发者发布、查找和安装Python模块的重要平台。PyPI上包含了各种各样的Python库,方便开发者使用,提高了开发效率。在这个例子中,我们...
这个库已经被打包成`.whl`文件,这是一种Python的二进制分发格式,用于简化安装过程。`.whl`文件的命名结构“-py2.py3-none-any”表示该库兼容Python 2和Python 3,可以在任何平台上运行。 描述中提到“解压后可用...
在给定的资源"python_workq-0.1-py2.py3-none-any.whl"中,我们看到的是一个Python库的打包文件,名为"python_workq",版本为0.1。这个文件是用whl(wheel)格式打包的,它是Python社区广泛采用的一种二进制分发格式...
"s3_client_lib-0.1.6-py3-none-any.whl" 文件是按照Python的Wheel格式打包的。Wheel是一种二进制的Python包格式,相比传统的源代码包(.tar.gz或.zip),它能提供更快的安装速度,因为它们已经预编译过,不需要在...
Python库“mcb-2.0.1-py3-none-any.whl”是一个用于Python开发的后端工具,它遵循Python的打包规范,是Python生态系统中的一个重要组成部分。Python社区广泛使用这种格式的文件来分发和安装第三方库,因为它们比源...