自定义 Python 库
使用虚拟环境
使用虚拟环境可以隔离其他环境, 当然也可以不使用
使用 virtualenvwrapper 建立虚拟环境
$ mkvirtualenv Setup -p /usr/bin/python3.7
(Setup)$ pip3 list
输出
Package Version
---------- -------
pip 20.1
setuptools 46.1.3
wheel 0.34.2
其中 setuptools 是用于自定义 Python 第三方库的工具
入门示例
新建文件 setup.py, 内容如下
from setuptools import setup
setup(
name="demo",
version="0.1",
scripts=[]
)
过程很简单, 仅仅调用了 setup 函数
编译安装该库
(Setup)$ python3 setup.py install
查看当前库
(Setup)$ pip3 list
Package Version
---------- -------
demo 0.1
pip 20.1
setuptools 46.1.3
wheel 0.34.2
已经多出了一个库 demo, 当然该库仅仅是个摆设, 使用 import demo 会报错
使用命名 setup.py 是一个惯例, 可以使用其他名称
(Setup)$ mv setup.py test.py
(Setup)$ python3 test.py install
使用模块
在同一目录创建两个文件 setup.py 和 demo.py
demo.py 的内容如下, 在 Demo 类中使用了 property 装饰器来封装 name 属性
__version__ = "0.2"
def add(x, y):
return x + y
class Demo:
def __init__(self):
self.__name = "jianghuixin"
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
self.__name = value
改写 setup.py
from setuptools import setup
setup(
name="demo",
version="0.2",
scripts=["demo.py"]
)
在当前目录编译安装
(Setup)$ python3 setup.py install
成功安装 0.2 版的 demo 库, 该库可以被导入使用
(Setup)$ python3
Python 3.7.5 (default, Nov 7 2019, 10:50:52)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import demo
>>> demo.__version__
'0.2'
>>> demo.add(1, 2)
3
>>> d=demo.Demo()
>>> d.name
'jianghuixin'
>>> d.name="Hoss"
>>> d.name
'Hoss'
使用包
在一个目录下建立一个包和 setup.py
.
.
├── demo
│ ├── demo.py
│ └── __init__.py
└── setup.py
demo.py 的内容
__version__ = "0.3"
def multiply(x, y):
return x * y
class Zeros:
def __init__(self, length):
self.length = length
def __len__(self):
return int(self.length)
def __getitem__(self, item):
if item < self.length:
return 0
else:
raise IndexError
setup.py 的内容:
from setuptools import setup
setup(
name="demo",
version="0.3",
description="demo",
author="jianghuixin",
packages=["demo"]
)
在当前目录编译安装
(Setup)$ python3 setup.py install
(Setup)$ python3
Python 3.7.5 (default, Nov 7 2019, 10:50:52)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from demo import demo
>>> demo.__version__
'0.3'
>>> demo.multiply(1, 2)
2
>>> z=demo.Zeros(3.6)
>>> len(z)
3
>>> list(z)
[0, 0, 0, 0]
查看库信息
(Setup)$ pip3 show demo
Name: demo
Version: 0.3
Summary: demo
Home-page: UNKNOWN
Author: jianghuixin
Author-email: UNKNOWN
License: UNKNOWN
Location: /home/jianghuixin/.virtualenvs/Setup/lib/python3.7/site-packages/demo-0.3-py3.7.egg
Requires:
Required-by: