python代码打包成whl_Python--PyPI打包上传实践,打包成whl文件实践。

2023-05-16

参考出处:https://segmentfault.com/a/1190000008663126html

参考:http://blog.csdn.net/xluren/article/details/41115045python

https://www.cnblogs.com/lazyboy/p/3830104.htmlgit

PS:因为网上讲的有些地方比较笼统,特意发表此文章具体描述。github

上传前的注意事项

假设你的包已经开发完成,而且根目录必需要有一个setup.py。sql

最好有一个README.rst 用来描述你的轮子,虽然这不是必须的,但文档就像内裤,你最好仍是要有的。shell

若是你须要打包代码文件夹之外的文件,好比版权信息等等,你还须要写一个 MANIFEST.in。segmentfault

关于setup.py的补充说明

name 必须是惟一的,容许使用数字和字母,推荐使用中划线(-)而不是下划线(_),由于pip安装只支持中划线,好比pip install my-pkg,为了避免给本身找麻烦请听话。tomcat

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帐号

建立用户验证文件 ~/.pypirc

在本身的用户目录下新建一个空白文件命名为.pypirc,内容以下:

[distutils]

index-servers=pypi

[pypi]

repository = https://upload.pypi.org/legacy/

username =

password =

用户名和密码就是上一步骤所建立的,直接明文输入。若是你以为明文密码不安全也能够留空,在后面的上传过程当中会提示你手动输入。

此处特意说明:建立.pypirc 的目录为:C:\Users\xxx-q001(你的计算机名)。建立时能够先建立一个txt文件,填入响应内容后修改文件名。

修改时改成.pypirc.保存便可。 注意后面必定要加一个.

注册你的包

你须要到PyPI注册并验证你的包,以后才能开始真正上传,注册的方式有如下几种。

使用命令python setup.py register,最简单但官网不推荐,由于使用的是HTTP未加密,有可能会被攻击人嗅探到你的密码。

安装 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网站后应该能在右侧导航栏看到管理入口。

76dff7c48a604beda69e0f1d.html

点击包名进去后你能够对你的包进行管理,固然你也能够从这里删除这个包。

让别人使用你的包

包发布完成后,其余人只须要使用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_wheelsD:\python\interface_demo\z_test (此处放入你须要打包的工程路径便可--如图我要打包的是z_test工程)

其中--wheel-dir=my_wheels 是打包存储的路径,能够具体设置。若是不是绝对路径,则默认是在C:\Users\xxxx1下建文件夹。

EG:

pip wheel --wheel-dir=D:\other\my_wheelsD:\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服务器,能够直接从服务器上下载安装)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python代码打包成whl_Python--PyPI打包上传实践,打包成whl文件实践。 的相关文章

  • Django:如何测试“HttpResponsePermanentRedirect”

    我正在为我的 django 应用程序编写一些测试 在我看来 它使用 HttpResponseRedirect 重定向到其他一些网址 那么我该如何测试呢 姜戈TestCase类有一个方法assertRedirects https docs d
  • 从正在运行的 python 脚本检测优化标志是否为 -O 或 -OO

    有时我想生成一个子进程 其优化标志与启动父进程时使用的优 化标志相同 我可以使用类似的东西 optimize not debug 但这样我就可以匹配两者 O and OO flags 是否有一些 python 内部状态包含该信息 经过一番深
  • 即使使用 .loc[row_indexer,col_indexer] = value 时也会设置 WithCopyWarning

    这是我的代码中得到的行之一SettingWithCopyWarning value1 Total Population value1 Total Population replace to replace value 4 然后我将其更改为
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • 如何使用Python将WebP图像转换为Gif?

    我已经尝试过这个 from PIL import Image im Image open this webp im save that gif gif save all True 这给了我这个错误 类型错误 不支持的操作数类型 tuple
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • 优化 Keras 以使用所有可用的 CPU 资源

    好吧 我真的不知道我在说什么 所以请耐心听我说 我正在使用 Theano 后端运行 Keras 以在 MNIST 图像上运行基本的神经网络 目前只是一个教程 过去 我一直使用我的旧 HP 笔记本电脑 因为我有 Windows 和 Ubunt
  • Paramiko - 使用私钥连接 - 不是有效的 OPENSSH 私钥/公钥文件

    我正在尝试找到解决方案 但无法理解我做错了什么 在我的 Linux 服务器上 我运行了以下命令 ssh keygen t rsa 这产生了一个id rsa and id rsa pub file 然后我将它们复制到本地并尝试运行以下代码 s
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • “char”/“character”类型的类型提示

    char 或 character 没有内置的原始类型 因此显然必须使用长度为 1 的字符串 但是为了暗示这一点并暗示它应该被视为一个字符 如何通过类型提示来实现这一点 grade chr A 一种方法可能是使用内置的 chr 函数来表示这一
  • 获取列表中倒数第二个元素[重复]

    这个问题在这里已经有答案了 我可以通过以下方式获取列表的倒数第二个元素 gt gt gt lst a b c d e f gt gt gt print lst len lst 2 e 有没有比使用更好的方法print lst len lst
  • 如何使用Python的super()来更新父值?

    我对继承很陌生 之前所有关于继承和 Python 的 super 函数的讨论都有点超出我的理解 我当前使用以下代码来更新父对象的值 usr bin env python test py class Master object mydata
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • 为什么我用 beautifulSoup 刮的时候有桌子,但没有 pandas

    尝试抓取条目页面转换为制表符分隔格式 主要拉出序列和 UniProt 登录号 当我跑步时 url www signalpeptide de index php sess m listspdb bacteria s details id 10
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • 全局变量是 None 而不是实例 - Python

    我正在处理Python 中的全局变量 代码应该可以正常工作 但是有一个问题 我必须使用全局变量作为类的实例Back 当我运行应用程序时 它说 back is None 这应该不是真的 因为第二行setup 功能 back Back Back
  • 如何在sphinx中启用数学?

    我在用sphinx http sphinx pocoo org index html与pngmath http sphinx pocoo org ext math html module sphinx ext pngmath扩展来记录我的代
  • 异步和协程与任务队列

    我一直在阅读有关 python 3 中的 asyncio 模块的内容 以及更广泛地了解 python 中的协程的内容 但我不明白是什么让 asyncio 成为如此出色的工具 我的感觉是 你可以用协程做的所有事情 通过使用基于多处理模块 例如
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t

随机推荐