python包创建过程
-
以包名创建一个文件夹,其中要包含一个init.py文件。(可以为空)
如果目录中包含了init.py 时,当用 import 导入该目录时,会执行init.py 里面的代码。
为方便调用包,最好在init.py 文件中直接编写实现模块功能的变量、函数和类。同时也可导入其他包。
如果功能被设计分散到不同的模块中,则init.py可以为空文档。
调用自定义包的内部其他模块的功能时,最好使用相对路径调用。 -
与包名同级编写setup.py
对于一个需要被分发的包来说,其根目录包含一个 setup.py 脚本,它定义了 distutils 模块中描述的所有元数据,并将其合并为标准的 setup() 函数调用的参数。
例子:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="doug",
version="0.0.1",
author="Example Author",
author_email="author@example.com",
description="A small example package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
# packages=setuptools.find_packages(),
packages = ['doug', 'doug.core'],
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
)
其中,setup 接受的最重要的参数包括:
name:包的名称
version:包的版本号,(额外技巧参考:http://c.biancheng.net/view/5494.html )
descriptions:包含描述包的几句话。
long_description:包含完整说明,可以使用 reStructuredText 格式。
keywords:定义包的关键字列表。
authors:作者的姓名或组织。
author_email:联系人电子邮件地址。
url:项目的 URL。
license:许可证(GPL、LGPL等)
packages:包中所有名称的列表,setuptools 提供了一个名为 find_packages 的小函数来计算它。
namespace_packages:命令空间包的列表。
分类器:
( 目前PYPI共分了9 类,参考:https://pypi.org/classifiers/)
开发状态(DevelopmentStatus)
环境(Environment)
框架(Framework)
目标受众(IntendedAudience)
许可证(License)
自然语言(Natural Language)
操作系统(Operating System)
编程语言(Programming Language)
话题(Topic)
经测试,packages还是要自己写好目录和包含的子目录
-
LICENSE文件
MIT是一种简单许可证,在开源项目中广泛使用,本项目已包含。 -
管理依赖
许多项目需要安装和(或)使用一些外部包。有两种方法提供依赖包:
第一种:在setup脚本中提供列表
from setuptools import setup
setup(
name = 'some-package',
install_requires=['falcon', 'requests', 'delorean']
#...
)
第二种:使用 requirements.txt 文件来追踪包的依赖列表
import os
from setuptools import setup
def strip_comments(l):
return l.split ('#', 1)[0].strip()
def reqs(*f):
ls = [strip_comments(l) for l in open(os.path.join(os.getcwd(), *f)).readlines()]
return list(filter(None, ls))
setup(
name = 'some-package',
install_requires = reqs('requirements.txt'),
#...
)
-
构建包
sdist命令创建源代码发行版
python setup.py sdist
生成的文件形式为举例:mypackage-0.1.1.tar.gz的打包文件包含与项目相同的结构
bdist分发预构建的发行版
python setup.py bdist
会生成文件形式为wjtestpack-0.0.0.win-amd64.zip格式的压缩包,这个包里主要有site-packages的文件夹,和一些缓存字节码.pyc结尾的文件。
wheels
python setup.py bdist_wheel
生成的文件为wjtestpack-0.0.0-py3-none-any.whl形式的文件 。 -
提交pypi
提交到pypi公共平台
如果想将自己的包提交到 https://pypi.python.org 供大家通过pip install xxx
使用:
注册 pypi ->
提交自己的包python setup.py register bdist upload
->
之后选择1,输入用户名、密码即可完成提交->
安装pypi中自己提交的包pip install xxx
网友评论