在开课吧app中听了一点体验课,大概了解到如何发布自己的python包到pypi,觉得有趣,所以练习了一下。完成过程将在本文记录下来。所发布的包用pip install 命令就可以安装,在python代码中用import命令就可以导入,然后即可使用。觉得还蛮酷的~


第一步 在pypi上注册一个自己的账号

注册网址:https://pypi.org/
  打开网页后,点击右上角的register,然后按照步骤完成即可。密码要求比较长。
  注册完后记得登录到你的邮箱中去验证一下邮箱有效性。

第二步 编写自己的包代码

此处写一个最简单的包,实现两个函数的计算,包代码文件及内容为:
  xl_dlframe.py 文件内容:
  

import numpy as np
    import randomdef sigmoid( x ):
       return 1 / ( 1 + np.exp( -x ) )def random_linear(x):
       k,b = random.random(), random.random()
       return k*x + b

文件__init__.py 文件内容:

from xl_dlframe.xl_dlframe import sigmoid
    from xl_dlframe.xl_dlframe import random_linear

第三步 准备打包文件

需要准备的打包文件包括:
  README.md
  requirements.txt
  setup.py

README.md 是一个文本文件,里面写一下包的介绍即可。
   requirements.txt 应该是列出一些包的依赖库,此处为空。包的依赖库在setup.py中列出了。
   setup.py 文件是一个关键的打包文件,其中列出了包的相关信息。
   此处内容如下:
from os import path as os_path
    from setuptools import setup, find_packagesthis_directory = os_path.abspath( os_path.dirname(file) )
### read file contents
    def read_file( filename ):
     print( “file name: {}”.format( os_path.join( this_directory, filename ) ) )
     with open( os_path.join( this_directory, filename ), encoding=‘utf-8’ ) as f:
      long_description = f.read()
     return long_description#### get the requirements
    def read_requirements(filename):
    return [line.strip() for line in read_file(filename).splitlines()
     if not line.startswith(’#’)]setup(
     name=‘xl_dlframe’, # package name
     python_requires=’>=3.4.0’, # python environment
     version=‘0.0.1’, # package version
    description=“Xiuli’s deep learning frame.”, # package introduction, shown in the pypi
     long_description = read_file(‘README.md’), # read the README.md’s contents
     long_description_content_type=“text/markdown”, # assign the package text format as markdown
     author=“XiuliZhang”, # aothor’s information
     author_email=‘zhangxiuli_nature@126.com’,
      url=‘’,
     # Tell the package information, find_packages() could be ok too
     packages=[‘xl_dlframe’],
     package_data = {
     ‘xl_dlframe’: [‘files.json’]
     }, # To read the data file
     install_requires=[
     ‘numpy’,
     ‘matplotlib’,
     ], # Tells the rellied packages
     include_package_data=True,
     license=“MIT”,
     keywords=[‘xl_dlframe’],
     classifiers=[
     ‘Intended Audience :: Developers’,
     ‘License :: OSI Approved :: MIT License’,
     ‘Natural Language :: English’,
     ‘Programming Language :: Python’,
     ‘Programming Language :: Python :: Implementation’,
     ‘Programming Language :: Python :: 3.4’,
     ‘Programming Language :: Python :: 3.5’,
     ‘Programming Language :: Python :: 3.6’,
      ‘Programming Language :: Python :: 3.7’,
     ‘Topic :: Utilities’
     ],
    )

文件的目录结构如下:

./README.md
 ./requirements.txt
 ./setup.py
 ./xl_dlframe
         /__init__.py
         /xl_dlframe.py

第四步 对安装包进行开发测试

执行 python3 setup.py develop
 此时如果没有报错,即是安装成功
 测试包:
 命令行运行python3
 依次输入:
  import xl_dlframe as xlf
  xlf.sigmoid(2)
 应无报错,并返回一个数值。

第五步 打包构建并上传至pypi

依次执行以下命令:
  
  sudo python3 setup.py build
  sudo python3 setup.py sdist bdist_egg bdist_wheel
  sudo python3 setup.py sdist upload
  sudo python3 setup.py bdist_egg upload
  sudo python3 setup.py bdist_wheel upload

此时应该已经上传成功,运行 sudo pip install xl_dlframe 应该能够安装成功,并且能够在python代码中使用了。

可能遇到的问题:

1.找不到~/.pypirc文件
处理:
  执行命令touch ~/.pypirc 创建该文件,然后执行 sudo gedit ~/.pypirc
输入如下内容并保存:

[distutils]
   index-servers =
   pypi
   pypitest[pypitest]
   repository = https://test.python.org/legacy/
   username = 你的pypi用户名
   password = 你的pypi密码[pypi]
   repository = https://upload.python.org/legacy/
   username = 你的pypi用户名
   password = 你的pypi密码

因为文件中保存了你的用户名和密码,所以记得设置文件权限:chmod 600 ~/.pypirc。

2.在代码中导入包是报错:
  ImportError: No module named ‘_tkinter’, please install the python3-tk package
处理:用命令 sudo apt-get install python3-tk 安装python3版本的tkinter。

3.  找不到包中的指定函数:
处理:在__init__.py中添加import 该函数的语句