Python模塊制作與發布
如果希望自己開發的模塊,分享 給其他人,可以按照以下步驟操作
新建包名為hello
,此模塊的全部功能由request.py
和response.py
兩個文件完成。
目錄結構:
.
|-- hello
| |-- __init__.py
| |-- request.py
| `-- response.py `-- setup.py
request.py
文件
def hello():
print("請求調用我")
response.py
文件
from hello.request import hello
def res():
hello()
print("已經響應了")
def main(): # 測試
res()
if __name__ == '__main__':
main()
__init__.py
文件
from . import request
from . import response
注:這里使用的是
Python3.x
的解釋器。
1. 制作發布壓縮包步驟
1) 創建 setup.py
setup.py
的文件
from distutils.core import setup
# 多值的字典參數,setup是一個函數
setup(name="Hello", # 包名
version="1.0", # 版本
description="a simple example", # 描述信息
long_description="簡單的模塊發布例子", # 完整描述信息
author="onefine", # 作者
author_email="188302531@qq.com", # 作者郵箱
url="www.onefine.top", # 主頁
py_modules=["hello.request",
"hello.response"]) # 記錄包中包中包含的所有模塊
有關字典參數的詳細信息,可以參閱官方網站:https://docs.python.org/2/distutils/apiref.html
2) 構建模塊
構建模塊命令如下
$ python3 setup.py build
如果出現下面情況
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$ python3 setup.py build
Traceback (most recent call last):
File "setup.py", line 1, in <module>
from distutils.core import setup
ModuleNotFoundError: No module named 'distutils.core'
因為ubuntu-18.10 默認沒有安裝 pip ,需要安裝 python3-pip
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$ sudo apt-get install python3-pip
[sudo] onefine 的密碼:
輸入密碼,耐心等待安裝之后重新構建模塊:
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$ python3 setup.py build
running build
running build_py
creating build
creating build/lib
creating build/lib/hello
copying hello/__init__.py -> build/lib/hello
copying hello/request.py -> build/lib/hello
copying hello/response.py -> build/lib/hello
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$
同樣,若出現下面情況,請安裝ipython3
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ ipython3
Command 'ipython3' not found, but can be installed with:
sudo apt install ipython3
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ sudo apt install ipython3
3) 生成發布壓縮包
生成發布壓縮包命令如下
$ python3 setup.py sdist
執行如下
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$ python3 setup.py sdist
running sdist
running check
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)
warning: sdist: standard file not found: should have one of README, README.txt
writing manifest file 'MANIFEST'
creating Hello-1.0
creating Hello-1.0/hello
making hard links in Hello-1.0...
hard linking setup.py -> Hello-1.0
hard linking hello/__init__.py -> Hello-1.0/hello
hard linking hello/request.py -> Hello-1.0/hello
hard linking hello/response.py -> Hello-1.0/hello
creating dist
Creating tar archive
removing 'Hello-1.0' (and everything under it)
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$
注意:要制作哪個版本的模塊,就使用哪個版本的解釋器執行!這里使用的是Python3.x。
查看一下
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$ ls dist -a -l
總用量 12
drwxr-xr-x 2 onefine onefine 4096 1月 14 20:02 .
drwxrwxr-x 7 onefine onefine 4096 1月 14 20:02 ..
-rw-r--r-- 1 onefine onefine 936 1月 14 20:02 Hello-1.0.tar.gz
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$
Hello-1.0.tar.gz
就是發布的模塊,自己開發的模塊制作完成。
3. 安裝模塊
解壓
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$ ls dist/ -l
總用量 8
drwxr-xr-x 3 onefine onefine 4096 1月 14 20:02 Hello-1.0
-rw-r--r-- 1 onefine onefine 936 1月 14 20:02 Hello-1.0.tar.gz
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils$ cd dist/
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils/dist$ tar -zxzf Hello-1.0.tar.gz
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils/dist$ ls -l
總用量 8
drwxr-xr-x 3 onefine onefine 4096 1月 14 20:02 Hello-1.0
-rw-r--r-- 1 onefine onefine 936 1月 14 20:02 Hello-1.0.tar.gz
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils/dist$ tree Hello-1.0
Hello-1.0
|-- PKG-INFO
|-- hello
| |-- __init__.py
| |-- request.py
| `-- response.py `-- setup.py
1 directory, 5 files
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils/dist$
安裝
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils/dist$ sudo python3 /Hello-1.0/setup.py install
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/hello
copying hello/__init__.py -> build/lib/hello
copying hello/request.py -> build/lib/hello
copying hello/response.py -> build/lib/hello
running install_lib
creating /usr/local/lib/python3.6/dist-packages/hello
copying build/lib/hello/request.py -> /usr/local/lib/python3.6/dist-packages/hello
copying build/lib/hello/response.py -> /usr/local/lib/python3.6/dist-packages/hello
copying build/lib/hello/__init__.py -> /usr/local/lib/python3.6/dist-packages/hello
byte-compiling /usr/local/lib/python3.6/dist-packages/hello/request.py to request.cpython-36.pyc
byte-compiling /usr/local/lib/python3.6/dist-packages/hello/response.py to response.cpython-36.pyc
byte-compiling /usr/local/lib/python3.6/dist-packages/hello/__init__.py to __init__.cpython-36.pyc
running install_egg_info
Writing /usr/local/lib/python3.6/dist-packages/Hello-1.0.egg-info
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils/dist$ tree Hello-1.0
Hello-1.0
|-- PKG-INFO
|-- build [error opening dir]
|-- hello
| |-- __init__.py
| |-- request.py
| `-- response.py `-- setup.py
2 directories, 5 files
onefine@onefine-virtual-machine:~/PycharmProjects/Distutils/dist$
測試
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ ipython3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
Type "copyright", "credits" or "license" for more information.
IPython 5.5.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import hello
In [2]: hello.response.res()
請求調用我
已經響應了
In [3]: exit
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$
卸載模塊
直接從安裝目錄下,把安裝模塊的 目錄 刪除就可以
onefine@onefine-virtual-machine:/$ cd /usr/local/lib/python3.6/dist-packages/
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ ls -a -l
總用量 16
drwxrwsr-x 3 root staff 4096 1月 14 20:53 .
drwxrwsr-x 3 root staff 4096 10月 18 06:23 ..
drwxr-sr-x 3 root staff 4096 1月 14 20:53 hello
-rw-r--r-- 1 root staff 223 1月 14 20:53 Hello-1.0.egg-info
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ sudo rm -r hello*
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ ls -a -l
總用量 12
drwxrwsr-x 2 root staff 4096 1月 14 21:12 .
drwxrwsr-x 3 root staff 4096 10月 18 06:23 ..
-rw-r--r-- 1 root staff 223 1月 14 20:53 Hello-1.0.egg-info
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ cat Hello-1.0.egg-info
Metadata-Version: 1.0
Name: Hello
Version: 1.0
Summary: a simple example
Home-page: www.onefine.top
Author: onefine
Author-email: 188302531@qq.com
License: UNKNOWN
Description: 簡單的模塊發布例子
Platform: UNKNOWN
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ sudo rm Hello-1.0.egg-info
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ ls -a -l
總用量 8
drwxrwsr-x 2 root staff 4096 1月 14 21:12 .
drwxrwsr-x 3 root staff 4096 10月 18 06:23 ..
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$
刪除成功,要不再來測試一下
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$ ipython3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
Type "copyright", "credits" or "license" for more information.
IPython 5.5.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import hello
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-f81fb083bdeb> in <module>()
----> 1 import hello
ModuleNotFoundError: No module named 'hello'
In [2]: exit
onefine@onefine-virtual-machine:/usr/local/lib/python3.6/dist-packages$
至此,模塊安裝從入門到卸載完成。
4. 使用 pip
安裝第三方模塊
第三方模塊 通常是指由 知名的第三方團隊 開發的 並且被 程序員廣泛使用 的 Python
包 / 模塊,例如 pygame
就是一套非常成熟的 游戲開發模塊
pip
是一個現代的,通用的Python
包管理工具- 提供了對
Python
包的查找、下載、安裝、卸載等功能
安裝和卸載命令如下:
# 將模塊安裝到 Python 2.x 環境
$ sudo pip install pygame
$ sudo pip uninstall pygame
# 將模塊安裝到 Python 3.x 環境
$ sudo pip3 install pygame
$ sudo pip3 uninstall pygame
在 Mac
下安裝 iPython
$ sudo pip install ipython
在 Linux
下安裝 iPython
$ sudo apt install ipython
$ sudo apt install ipython3