一 起因
起因很简单,实验室的小伙伴写的新算法需要在论文发表的同时发布到的网上,因此有了以下的过程。
二 调用
第一步,package的发布需要再系统层面完成两步:build包(用于package的打包)的安装和系统命令twine(package的上传)的安装。
第二步:在发布官方注册账号,需要记住账号与密码,后面包上传需要。
https://test.pypi.org/
第三步,创建一个文件夹,内部包含以下文件。
3.1 LICENSE文件用于体现发布包的许可,官方模板如下:
Copyright (c) 2018 The Python Packaging Authority
Permission 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.2 pyproject.toml文件用于指定发布包的系统要求和信息,打包过程中将被使用到。官方模板如下:
[project]
name = "add_example"
version = "0.0.1"
authors = [
{ name="Example Author", email="author@example.com" },
]
description = "A small example package"
readme = "README.md"
requires-python = ">=3.7"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
[project.urls]
"Homepage" = "https://github.com/pypa/sampleproject"
"Bug Tracker" = "https://github.com/pypa/sampleproject/issues"
3.3 README.md文件,这应该是每个程序员最最熟悉的文件了,主要用于介绍发布包的一些相关情况。
# Example Package
This is a simple example package. You can use
[Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/)
to write your content.
第四步:发布包的资源创建。这一步我们需要再src文件下创建发布包的文件夹。,如本例中发布包的名称是add_example,所以src下就有一个同名的文件夹。
这个文件夹即是你需要打包的文件夹,里面通常包含两个文件,如下:
其中__init__.py可以是空文件,而example.py文件则需要放入你所需要发布的函数。本例中需要发布的就是add_one函数(就是加1,虽然简单,但也是最重要的数据定理)。
def add_one(number):
return number + 1
第五步:回到src所在目录,调用函数对包进行打包
python -m build
打包之后,本目录下会新建一个dist目录(用于上传发布的目录)
dist文件夹中会出现两个文件:add_example-0.0.1.tar.gz和add_example-0.0.1-py3-none-any.whl。
当然,在src的文件夹中也会出现一个新的以.egg-info为后缀的文件夹,如下。
只是该目录下的文件对于发布包并没有任何作用。
第六步:利用twine命令上传,直到显示所有上传都已完成即可
twine upload --repository testpypi dist/*
上传完毕之后,你就可以在https://test.pypi.org/中看到你自己的项目了(需要登录)。
然后,你通过manage按钮点进去你的project,可以看到
接着点击0.0.1,可以看见你上传的两个文件
即使如此,你上传的库会一直存在,如本文上传的库,即可以再https://test.pypi.org/project/add-example/#description网站查询到。登录进去后,可以看到网页,如下:
之后,可以直接从pip直接一键安装的命令。
pip install -i https://test.pypi.org/simple/ add-example
也可以将我们上传的文件下载下来,在本地进行编译。
add_example-0.0.1.tar.gz
add_example-0.0.1-py3-none-any.whl
小贴士1,上传的whl文件可以直接本地安装,从而查看上传的包是否会出现bug
python -c'from add_exampleimportexample;example.add_one(2)'
3
小贴士2:这一上传最好是在linux中(上传也会比较慢),因为我在windows中上传的特别慢
所有的检测都是为了最后能够正式安装,所以最后一步必然是上传到最重要的官方库中啦(正式版的pypi端)
官方库地址:https://pypi.org/manage/projects/
PS 做一个更正与补充:
《图一乐:如何使用机器学习成为具有艺术天分的画家》推文中的github库为https://github.com/invoke-ai/InvokeAI,下载的模型来自https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
三 惯例小结
其实写软件的目的除了供自己用之外,最重要的目的应该就是分享给大家使用了吧,亦或者商业化。不过对于论文而言,还是尽可能的希望开源吧,这样才能快速提高,实现价值利用的最大化(不排斥商业化,毕竟人也是要吃饭的嘛),
另外,进一步推广一下我开发的相关软件,Multi-omics Hammer软件和Multi-omics Visual软件,也欢迎大家关注并多提意见,详细的话可以见个人主页介绍。
以下为自研软件地址:
Multi-omics Hammer软件地址:https://github.com/wangjun258/Multi-omics-Hammer
Multi-omics Visual软件地址:https://github.com/wangjun258/Multi_omics_Visual