Python--PyPI打包上传实践,打包成whl文件实践。

参考出处: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='[email protected]',
    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注册并验证你的包,之后才能开始真正上传,注册的方式有以下几种。

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

  2. 通过PyPI网站提交表单完成注册验证。

  3. 安装 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.

 

上传并完成发布

你可以任选以下两种方式之一发布你的轮子。

  1. 使用命令:python setup.py sdist upload,还是和上面一样,最简单但是有安全隐患。

  2. 使用 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服务器,可以直接从服务器上下载安装)

 

 

猜你喜欢

转载自youyou888856.iteye.com/blog/2407490