在开课吧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 该函数的语句