Pip Package
导言
之前其实开发了自己的包,想写点轮子。但是那个时候并没有。按照对象编程的思想,打算重构并拓展常用内容 from PIA(uniPIM) Project。
包__init__.py
里的__all__
变量
在 Python 中,__all__
是一个特殊变量,用于定义模块在 import *
语句下导出的公共接口。它通常出现在包的 __init__.py
文件或模块文件中,指定该模块或包的哪些内容可以被外部模块访问。
用法
当在 __init__.py
文件中定义 __all__
时,例如:
它的作用是,当用户执行 from package_name import *
时,只有 __all__
列表中的项会被导入到当前命名空间。
示例
假设有一个包 mypackage
,目录结构如下:
在 __init__.py
中设置 __all__
:
# __init__.py
__all__ = ["module_a", "module_b"]
import mypackage.module_a
import mypackage.module_b
然后在使用时:
仅 module_a
和 module_b
会被导入。
发布自己的pip包¶
注册自己的 PyPi 帐号¶
也可以是自己搭的 PyPi私服仓库的账号1
依据自己的项目目录,创建setup.py¶
如下图所示,agent_cli是我整体的项目,我想要将pip-test目录下的代码打包上传到Pypi仓库中;
在pip-test的同级目录,创建setup.py文件
编写自己的setup.py文件¶
from setuptools import setup, find_packages
setup(
name='tsjPython', # 打包后的包文件名
version='0.1', # 版本号
keywords=("tsj"), # 关键字
description='personal code for tsj', # 说明
long_description="none", # 详细说明
license="MIT Licence", # 许可
url='http://home.ustc.edu.cn/~shaojiemike',
author='Shaojie Tan',
author_email='[email protected]',
# packages=find_packages(), #这个参数是导入目录下的所有__init__.py包
include_package_data=True,
platforms="any",
install_requires=['termcolor',
'plotille'], # 引用到的第三方库
# py_modules=['pip-test.DoRequest', 'pip-test.GetParams', 'pip-test.ServiceRequest',
# 'pip-test.ts.constants', 'pip-test.ac.Agent2C',
# 'pip-test.ts.ttypes', 'pip-test.ac.constants',
# 'pip-test.__init__'], # 你要打包的文件,这里用下面这个参数代替
packages=['tsjPython'] # 这个参数是导入目录下的所有__init__.py包
)
打包自己的项目¶
执行下述两条命令
python setup.py build #执行此命令后,会生成上面图片中build的目录,目录层级是 build/lib/pip-test, pip-test目录下就是你打包文件解压后的结果,可以在此查看打包的代码是否完整
python setup.py sdist # 执行此命令后,就会在dist目录下生成压缩包文件 .tar.gz
上传到PyPi服务器¶
在上传前,要建一个文件,$HOME/.pypirc
,$HOME
目录在linux或者mac系统下就是~/目录。在这里建一个 .pypirc
文件。里边的内容如下:
或者使用token.
注册好之后,生成一个 token:https://pypi.org/manage/account/#api-tokens。由于我们是要上传新项目,所以不要限制 scope 到特定的项目。
提前安装 py -m pip install --upgrade twine
执行此命令: twine upload dist/XXXXX-0.1.0.tar.gz
上传你刚刚打包好的压缩包
安装使用¶
使用 pip install XXX
就可以轻松使用
开发测试包¶
如果为了测试而上传代码,会占用版号。
可以通过先安装在本地来实现
开发时避免经常重复安装
使用 setup.py 安装的包会被复制到当前环境的 site-packages 目录下,这意味着,一旦我们修改了包的源代码,就需要重新安装它。
setuptools 提供了一个额外的 develop
命令,其完整格式为Python setup.py develop
,该命令允许我们在开发模式下安装包,它会在部署目录(site-packages)时创建一个指向项目源代码的特殊链接,而不是将整个包复制过去,从而实现在编辑包的源代码之后无需再重新安装,并且它在 sys.path
中可用,就像正常安装一样。
pip 也支持用这种模式来安装包,这个安装选项叫作可编辑模式,可以使用 install 命令的 -e
参数来启用,代码格式如下:pip install -e 包路径