Python 学习 ---> 模块、pypi ( 模块库 )、添加模块路径

动态导 包

使用 importlib 模块

cls_info = 'feapder.pipelines.console_pipeline.ConsolePipeline'
module, class_name = cls_info.rsplit(".", 1)
cls = importlib.import_module(module).__getattribute__(class_name)

__import__ 从文件中 导入 方法、类

import importlib.util

# 从文件中导入类
def import_class_from_file(file_path, class_name):
    spec = importlib.util.spec_from_file_location(class_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    class_obj = getattr(module, class_name)
    return class_obj

# 从文件中导入方法
def import_function_from_file(file_path, function_name):
    spec = importlib.util.spec_from_file_location(function_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    function_obj = getattr(module, function_name)
    return function_obj

# 导入文件中的类
class_obj = import_class_from_file('/path/to/file.py', 'ClassName')

# 使用导入的类
obj = class_obj()
obj.some_method()

# 导入文件中的方法
function_obj = import_function_from_file('/path/to/file.py', 'function_name')

# 使用导入的方法
result = function_obj()

1、模块

什么是 模块

在 Python 中,一个.py文件就是一个模块(Module)。模块的名字就是文件的名字。在模块内部,通过全局变量 __name__ 可以获取模块名(即字符串)

模块 作用

为了实现代码的复用,通常会把一些其他程序中重用的代码拿出来单独放在一个程序文件中,

永久添加 模块路径

Pycharm 中完成编码,且在 Pycharm 中可正常运行,以为就万事大吉了,但在Linux命令行中执行时,报错:找不到所导入的包;因为在 pycharm 中完成编码,执行代码时,pycharm会动态帮你把一切都做好,基本不会出现类似导包出错问题;但在命令行情况下,就需要注意是否存在该问题了;

Python 解释器查找包(模块)的顺序:

  • 内存(模块缓存)
  • 内置模块 built-in module(例如:sys、os, 可通过sys.builtin_module_names查看)
  • sys.path (环境变量中)
  • sys.path 列表中 index:0 (第一个元素),为被执行 python 文件所在目录,优先级最高
  • 标准库 (可通过 sys.modules 查看)
  • .pth 文件(python会寻找.pth文件,然后将文件里路径加入 sys.path)
  • 第三方库(通过 pip install 安装的库)

当找不到模块路径时,可以查看当前print(sys.path)是否包含所需路径 

方法 1:临时性添加

只对当前 shell 有效,当关闭 shell 后,就会失效,

import sys
sys.path.append('模块路径')

或者代码中添加如下代码:

import os
import sys
ptr_dir_path = os.path.dirname
current_dir = os.getcwd()
sys.path.append(current_dir)
sys.path.append(ptr_dir_path(current_dir))
sys.path.append(ptr_dir_path(ptr_dir_path(ptr_dir_path(current_dir))))

import os
import sys

current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
parent_parent_dir = os.path.dirname(parent_dir)
parent_parent_parent_dir = os.path.dirname(parent_parent_dir)
sys.path.append(os.getcwd())
sys.path.append(parent_dir)
sys.path.append(parent_parent_dir)
sys.path.append(parent_parent_parent_dir)

因为 sys.path 列表中 index:0 位置,是被执行python文件所在目录,优先级最高,会第一个找这个目录;所以 sys.path 中 "index:0 位置的路径" 可以设置为 "项目根目录",这么操作即可

import os
import sys
current_dir = os.path.abspath(os.path.dirname(__file__))
root_path = os.path.split(current_dir)[0]
sys.path.insert(0, os.path.split(root_path)[0])

方法 2:编辑 my.pth

永久性添加
shell 下,cd /usr/lib/python2.7/dist-packages 
然后建立一个.pth的文件,例如我们建立一个mytest.pth
$ sudo echo mytest.pth
然后我们打开这个文件进行编辑
$sudo gedit mytest.pth
然后就会看到我们建立的文件打开了,在文件里添加我们要添加的模块路径,例如我的是 /home/ghz/caffe/python/,保存退出
$python
>>>import caffe
>>>
ok,成功

添加路径: cd /usr/local/python3/lib/python3.6/site-packages
vi my.pth

2、Python 中导入模块

导入模块的方法

import modname

用import语句导入模块,就在当前的名称空间(namespace)建立了一个到该模块的引用.这种引用必须使用全称,也就是说,当使用在被导入模块中定义的函数时,必须包含模块的名字。所以不能只使用 funcname,而应该使用 modname.funcname

只要导入了一个模块,就可以引用它的任何公共的函数、类或属性。模块可以通过这种方法来使用其它模块的功能。

from modname import *

from modname import funcname
或者 
from modname import *

与第1种方法的区别:funcname 被直接导入到本地名字空间去了,所以它可以直接使用,而不需要加上模块名的限定

* 表示,该模块的所有公共对象(public objects)都被导入到 当前的名称空间,也就是任何只要不是以”_”开始的东西都会被导入。

如果导入之前 funcname 已经被定义,它会被新版本(该导入模块中的版本)所替代。

如果funcname被改成指向其他对象,modname 不能、也不会 觉察到。

建议:

  • 1) 如果经常访问模块的属性和方法,使用 from module import
  • 2) 如果有选择地导入某些属性和方法,而不想要其它的,使用 from module import
  • 3) 如果模块包含的属性和方法与你的某个模块同名,必须使用 import module 来避免名字冲突
  • 4) 尽量少用 from module import * ,因为判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难。

总结:导入一个包组件,需要一个包里面的某个子模块,一般用 from A.b import c比import A.b.c 更方便 且不会冒混淆的危险.

__import__()

除了前面两种使用import关键字的方法以外,还可以使用内建函数 __import__() 来导入 module。
两者的区别是:

  • import 后面跟的必须是一个类型(type),
  • __import__() 的参数是一个字符串,这个字符串可能来自配置文件,也可能是某个表达式计算结果。例如:mymodule = __import__ (’module_name’)

模块 搜索 路径

默认情况下,Python 解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在 sys模块的 path 变量中:

>>> import sys
>>> sys.path

如果要添加自己的搜索目录,有两种方法:

一是直接修改sys.path,添加要搜索的目录:

>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')

这种方法是在运行时修改,运行结束后失效。

第二种方法是设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。

导入 第三方 模块

在Python中,安装第三方模块,是通过setuptools这个工具完成的。Python 有两个封装了setuptools 的包管理工具:easy_install 和 pip。目前官方推荐使用 pip。

强烈推荐安装 pip 安装 python 第三方模块

安装一个第三方库——Python Imaging Library,这是Python下非常强大的处理图像的工具库。

一般来说,第三方库都会在Python官方的网站pypi.python.org注册,要安装一个第三方库,必须先知道该库的名称,可以在官网或者pypi上搜索,比如:Python Imaging Library 的名称叫 PIL,因此,安装 Python Imaging Library 的命令就是:pip install PIL

有了PIL,处理图片易如反掌。随便找个图片生成缩略图:

>>> import Image
>>> im = Image.open('test.png')
>>> print im.format, im.size, im.mode
PNG (400, 300) RGB
>>> im.thumbnail((200, 100))
>>> im.save('thumb.jpg', 'JPEG')

pypi:模块库

Python  的第三方模块库,当需要什么模块时,可以直接在上面搜,或者 有什么功能不想自己写时,也可以直接搜,比如:"重试" 功能,英文单词是 retry,直接搜索 retry

这里选择时间最新,点击进入,就可以看到安装、使用 方法

pip install retry2

def retry(exceptions=Exception, tries=-1, delay=0, max_delay=None, backoff=1, jitter=0, logger=logging_logger,
          on_exception=None):
    """Return a retry decorator.

    :param exceptions: 要捕获的异常,或者异常的元组。默认: Exception.
    :param tries: 最大重试次数, 默认: -1 (infinite:无限).
    :param delay: 两次重试间隔时间. 默认: 0.
    :param max_delay: 最大延迟时间. 默认: None (无限制).
    :param backoff: multiplier applied to delay between attempts. default: 1 (no backoff).
    :param jitter: 在两次尝试之间增加了额外的延迟时间. default: 0.
                   固定一个数字,或者随机一个范围(min, max)
    :param logger: logger.warning(fmt, error, delay) 再失败重试时调用.
                   default: retry.logging_logger. 如果 None, logging 被禁用
    :param on_exception: 当异常发生时被调用(即异常发生时的回调函数). 
                         将作为一个参数传递给捕获的异常. 默认: None
    """

示例:

# -*- coding: UTF-8 -*-

from retry import retry

count = 0


def func_callback(*args, **kwargs):
    print(f"函数 ---> {func_callback.__name__}")


@retry(BaseException, tries=3, on_exception=func_callback)
def func_test():
    global count
    count += 1
    print(f"失败次数 ---> {count}")
    raise Exception("失败")


if __name__ == "__main__":
    try:
        func_test()
    except BaseException as e:
        print(e)
    print("主函数结束")

示例:

import requests
from retry.api import retry_call


def make_trouble(service, info=None):
    if not info:
        info = ''
    r = requests.get(service + info)
    return r.text


def what_is_my_ip(approach=None):
    if approach == "optimistic":
        tries = 1
    elif approach == "conservative":
        tries = 3
    else:
        # skeptical
        tries = -1
    result = retry_call(make_trouble, fargs=["http://ipinfo.io/"], fkwargs={"info": "ip"}, tries=tries)
    print(result)


what_is_my_ip("conservative")

Python 重试机制

安装:pip install tenacity

一个第三方库 Tenacity,它实现了几乎我们可以使用到的所有重试场景,比如:

  • 在什么情况下才进行重试?
  • 重试几次呢?
  • 重试多久后结束?
  • 每次重试的间隔多长呢?
  • 重试失败后的回调?

无条件重试,重试之间无间隔

from tenacity import retry

@retry
def test_retry():
    print("等待重试,重试无间隔执行...")
    raise Exception

test_retry()

无条件重试,但是在重试之前要等待 2 秒

from tenacity import retry, wait_fixed

@retry(wait=wait_fixed(2))
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

只重试7 次

from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(7))
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

重试 10 秒后不再重试

from tenacity import retry, stop_after_delay

@retry(stop=stop_after_delay(10))
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

或者上面两个条件满足一个就结束重试

from tenacity import retry, stop_after_delay, stop_after_attempt

@retry(stop=(stop_after_delay(10) | stop_after_attempt(7)))
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

在出现特定错误/异常(比如请求超时)的情况下,再进行重试

from requests import exceptions
from tenacity import retry, retry_if_exception_type

@retry(retry=retry_if_exception_type(exceptions.Timeout))
def test_retry():
    print("等待重试...")
    raise exceptions.Timeout

test_retry()

当 test_retry 函数返回值为 False 时,再进行重试

from tenacity import retry, stop_after_attempt, retry_if_result

def is_false(value):
    return value is False

@retry(stop=stop_after_attempt(3),
       retry=retry_if_result(is_false))
def test_retry():
    return False

test_retry()

多个条件注意顺序

import time
from requests import exceptions
from tenacity import retry, retry_if_exception_type, stop_after_attempt

@retry(stop=stop_after_attempt(5), retry=retry_if_exception_type(exceptions.Timeout))
def test_retry():
    time.sleep(1)
    print("retry")
    raise exceptions.Timeout

test_retry()

重试后错误重新抛出

当出现异常后,tenacity 会进行重试,若重试后还是失败,默认情况下,往上抛出的异常会变成 RetryError,而不是最根本的原因。因此可以加一个参数(reraise=True),使得当重试失败后,往外抛出的异常还是原来的那个。


@retry(stop=stop_after_attempt(7), reraise=True)
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

设置回调函数

当最后一次重试失败后,可以执行一个回调函数

from tenacity import *

def return_last_value(retry_state):
    print("执行回调函数")
    return retry_state.outcome.result()  # 表示返回原函数的返回值

def is_false(value):
    return value is False

@retry(stop=stop_after_attempt(3),
       retry_error_callback=return_last_value,
       retry=retry_if_result(is_false))
def test_retry():
    print("等待重试中...")
    return False

print(test_retry())

3、使用模块

创建模块 ( 创建一个 py 文件 )

#!/usr/bin/python
# Filename: mymodule.py
def sayhi():
    print 'Hi, this is mymodule speaking.'
version = '0.1'
# End of mymodule.py

上面是一个 模块 的例子。你已经看到,它与我们普通的Python程序相比并没有什么特别之处。我们接下来将看看如何在我们别的Python程序中使用这个模块。

记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。

#!/usr/bin/python
# Filename: mymodule_demo.py
import mymodule
mymodule.sayhi()
print 'Version', mymodule.version
输出
$ python mymodule_demo.py
Hi, this is mymodule speaking.
Version 0.1 

导入 模块

在 Python 中用关键字 import 来引入某个模块,比如要引用模块 math,就可以在文件最开始的地方用 import math 来引入。在调用 math 模块中的函数时,必须这样引用:模块名.函数名

为什么必须加上模块名这样调用呢?因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名。

import math

#这样会报错
print sqrt(2)

#这样才能正确输出结果
print math.sqrt(2)

如果想一次性引入math中所有的东西,还可以通过from math import *来实现,但是不建议这么做。Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。以内建的 sys 模块为例,编写一个 hello.py 的模块:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'author_name'

import sys


def func_test():
    args = sys.argv
    if len(args) == 1:
        print('Hello, world!')
    elif len(args) == 2:
        print(f'Hello, {args[1]}!')
    else:
        print('Too many arguments!')


if __name__ == '__main__':
    func_test()

使用 sys 模块的第一步,就是导入该模块: import sys

导入sys 模块后,我们就有了变量 sys 指向该模块,利用 sys 这个变量,就可以访问 sys 模块的所有功能。sys 模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该 .py 文件的名称,

例如:

运行 python hello.py 获得的 sys.argv 就是['hello.py'];
运行 python hello.py 123abc 获得的 sys.argv 就是['hello.py', '123abc']。

最后,注意到这两行代码:

if __name__ == '__main__':
    func_test()

当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量 __name__ 置为 __main__ 。而如果在其他地方导入该hello模块时,if 判断将失败。因此,这种 if 测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试。

 示例:using_sys.py

#!/usr/bin/python
# Filename: using_sys.py
import sys

print('The command line arguments are:')
for i in sys.argv:
    print(i)
print('\n\nThe PYTHON_PATH is', sys.path, '\n')

只用到模块中的某个函数:from 模块名 import 函数名1,函数名2....

两个模块中含有相同名称函数

但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。

也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数。

模块的属性 ( 模块内全局变量 )

一个模块顶层定义的变量,会自动变成模块的属性

data=[1,2,3]  
  
def printme(var):  
    print var  
if __name__ == '__main__':  
        printme(1)  

data 变量就是模块的一个属性。其实 printme 也是一个属性,只不过是一个函数罢了。

别名

导入模块时,还可以使用别名,这样,可以在运行时根据当前环境选择最合适的模块。比如 Python 标准库一般会提供 StringIO 和 cStringIO 两个库,这两个库的接口和功能是一样的,但是cStringIO是C写的,速度更快,所以,你会经常看到这样的写法:

try:
    import cStringIO as StringIO
except ImportError: # 导入失败会捕获到ImportError
    import StringIO

这样就可以优先导入cStringIO。如果有些平台不提供 cStringIO,还可以降级使用 StringIO。导入cStringIO 时,用 import ... as ... 指定了别名 StringIO,因此,后续代码引用 StringIO 即可正常工作。

还有类似 simplejson 这样的库,在Python 2.6之前是独立的第三方库,从2.6开始内置,所以,会有这样的写法:

try:
    import json # python >= 2.6
except ImportError:
    import simplejson as json # python <= 2.5

由于 Python 是动态语言,函数签名一致接口就一样,因此,无论导入哪个模块后续代码都能正常工作。

模块中 的 作用域

在一个模块中,会定义很多函数和变量,但有的函数和变量希望给别人使用,有的函数和变量仅仅在模块内部使用。在Python中,是通过 _ 前缀来实现的。

正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等;

类似 __xxx__ 这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__ 就是特殊变量,hello 模块定义的文档注释也可以用特殊变量 __doc__ 访问,我们自己的变量一般不要用这种变量名;

类似 _xxx 和 __xxx 这样的函数或变量就是非公开的(private),不应该被直接引用,比如 _abc,__abc 等;

之所以说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。

private函数或变量不应该被别人引用,那它们有什么用呢?请看例子:

def _private_1(name):
    return 'Hello, %s' % name

def _private_2(name):
    return 'Hi, %s' % name

def greeting(name):
    if len(name) > 3:
        return _private_1(name)
    else:
        return _private_2(name)

我们在模块里公开greeting()函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,即:外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。

globals() 和 locals() 函数

根据调用地方的不同,globals()和locals()函数可被用来返回全局和局部命名空间里的名字。
如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名。
如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字。
两个函数的返回类型都是字典。所以名字们能用keys()函数摘取

dir() 函数 :查看 模块定义的标识符

你可以使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。

当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。

$ python
>>> import sys
>>> dir(sys) # get list of attributes for sys module
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__',
'__stdin__', '__stdout__', '_getframe', 'api_version', 'argv',
'builtin_module_names', 'byteorder', 'call_tracing', 'callstats',
'copyright', 'displayhook', 'exc_clear', 'exc_info', 'exc_type',
'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval',
'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding',
'getrecursionlimit', 'getrefcount', 'hexversion', 'maxint', 'maxunicode',
'meta_path','modules', 'path', 'path_hooks', 'path_importer_cache',
'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setdlopenflags',
'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout',
'version', 'version_info', 'warnoptions']
>>> dir() # get list of attributes for current module
['__builtins__', '__doc__', '__name__', 'sys']
>>>
>>> a = 5 # create a new variable 'a'
>>> dir()
['__builtins__', '__doc__', '__name__', 'a', 'sys']
>>>
>>> del a # delete/remove a name
>>>
>>> dir()
['__builtins__', '__doc__', '__name__', 'sys']
>>> 

它如何工作

首先,我们来看一下在输入的sys模块上使用dir。我们看到它包含一个庞大的属性列表。

接下来,我们不给dir函数传递参数而使用它——默认地,它返回当前模块的属性列表。注意,输入的模块同样是列表的一部分。

为了观察dir的作用,我们定义一个新的变量a并且给它赋一个值,然后检验dir,我们观察到在列表中增加了以上相同的值。我们使用del语句删除当前模块中的变量/属性,这个变化再一次反映在dir的输出中。

关于del的一点注释——这个语句在运行后被用来 删除 一个变量/名称。在这个例子中,del a,你将无法再使用变量a——它就好像从来没有存在过一样。

4、Python 自带模块:os、sys

sys 模块

sys 模块主要是用于提供对 python 解释器相关的操作。相关函数:

sys.argv #命令行参数List,第一个元素是程序本身路径
sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.modules.keys() #返回所有已经导入的模块列表
sys.modules #返回系统导入的模块字段,key是模块名,value是模块
sys.exc_info() #获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息
sys.exit(n) #退出程序,正常退出时exit(0)
sys.hexversion #获取Python解释程序的版本值,16进制格式如:0x020403F0
sys.version #获取Python解释程序的版本信息
sys.platform #返回操作系统平台名称
sys.maxint # 最大的Int值
sys.stdout #标准输出
sys.stdout.write('aaa') #标准输出内容
sys.stdout.writelines() #无换行输出
sys.stdin #标准输入
sys.stdin.read() #输入一行
sys.stderr #错误输出
sys.exc_clear() #用来清除当前线程所出现的当前的或最近的错误信息
sys.exec_prefix #返回平台独立的python文件安装的位置
sys.byteorder #本地字节规则的指示器,big-endian平台的值是'big',little-endian平台的值是'little'
sys.copyright #记录python版权相关的东西
sys.api_version #解释器的C的API版本
sys.version_info #'final'表示最终,也有'candidate'表示候选,表示版本级别,是否有后继的发行
sys.getdefaultencoding() #返回当前你所用的默认的字符编码格式
sys.getfilesystemencoding() #返回将Unicode文件名转换成系统文件名的编码的名字
sys.builtin_module_names #Python解释器导入的内建模块列表
sys.executable #Python解释程序路径
sys.getwindowsversion() #获取Windows的版本
sys.stdin.readline() #从标准输入读一行,sys.stdout.write(a) 屏幕输出a
sys.setdefaultencoding(name) #用来设置当前默认的字符编码(详细使用参考文档)
sys.displayhook(value) #如果value非空,这个函数会把他输出到sys.stdout(详细使用参考文档)

常用功能

sys.arg 获取位置参数
print(sys.argv)

执行该脚本,加参数的打印结果
python3 m_sys.py  1 2 3 4 5

['m_sys.py', '1', '2', '3', '4', '5']
可以发现 sys.arg返回的是整个位置参数,类似于shell的$0 $1...
sys.exit(n) 程序退出,n是退出是返回的对象
sys.version 获取python版本
>>> sys.version
'3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]'
sys.path 返回模块的搜索路径列表,可通过添加自定义路径,来添加自定义模块
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python35.zip', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages']

sys.platform 返回当前系统平台 linux平台返回linux,windows平台返回win32,MAC返回darwin
>>> sys.platform
'darwin
sys.stdout.write() 输出内容
>>> sys.stdout.write('asd')
asd3
>>> sys.stdout.write('asd')
asd3
>>> sys.stdout.write('as')
as2

示例:进度条:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

"""
sys 和python解析器相关
"""

from __future__ import division
import sys
import time


def view_bar(num, total):
    rate = num / total
    rate_num = int(rate * 100)
    # r = '\r %d%%' %(rate_num)
    r = '\r%s>%d%%' % ('=' * rate_num, rate_num,)
    sys.stdout.write(r)
    sys.stdout.flush


if __name__ == '__main__':
    for i in range(0, 101):
        time.sleep(0.1)
        view_bar(i, 100)

os 模块

os 模块是 Python 标准库中的一个用于访问操作系统功能的模块,使用OS模块中提供的接口,可以实现跨平台访问,用于提供系统级别的操作。

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir(dirname) 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dir1/dir2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename(oldname,new) 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 操作系统特定的路径分隔符,win下为\,Linux下为/
os.linesep 当前平台使用的行终止符,win下为\t\n,Linux下为\n
os.pathsep 用于分割文件路径的字符串
os.name 字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system(bash command) 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.lexists  #路径存在则返回True,路径损坏也返回True
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.commonprefix(list) #返回list(多个路径)中,所有path共有的最长的路径。
os.path.expanduser(path)  #把path中包含的"~"和"~user"转换成用户目录
os.path.expandvars(path)  #根据环境变量的值替换path中包含的”$name”和”${name}”
os.access('pathfile',os.W_OK) 检验文件权限模式,输出True,False
os.chmod('pathfile',os.W_OK) 改变文件权限模式

5、Python 包

如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。

假设abc和xyz这两个模块名字与其他模块冲突了,可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放:

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。

现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz。

请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。

__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany。

类似的,可以有多级目录,组成多级层次的包结构。比如如下的目录结构:

文件www.py的模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utils和mycompany.web.utils。

mycompany.web也是一个模块,请指出该模块对应的.py文件。

6、第三方库大全

中文版地址:https://github.com/jobbole/awesome-python-cn
英文版地址:https://github.com/vinta/awesome-python

哪些 Python 库让你相见恨晚?

最全数据分析资料汇总(含python、爬虫、数据库、大数据、tableau、统计学等):https://zhuanlan.zhihu.com/p/69869004
转:Python标准库(非常经典的各种模块介绍):https://www.cnblogs.com/ysjt/p/6526958.html

环境管理

管理 Python 版本和环境的工具

  • p:非常简单的交互式 Python 版本管理工具。
  • pyenv:简单的 Python 版本管理工具。
  • Vex:可以在虚拟环境中执行命令。
  • virtualenv:创建独立 Python 环境的工具。
  • virtualenvwrapper:virtualenv 的一组扩展。
  • buildout:在隔离环境初始化后使用声明性配置管理。

包管理

管理包和依赖的工具。

  • pip:Python 包和依赖关系管理工具。
  • pip-tools:保证 Python 包依赖关系更新的一组工具。
  • PyPI:Python 正式的第三方包软件存储库。
  • pipenv:Python 官方推荐的新一代包管理工具。
  • poetry:可完全取代 setup.py 的包管理工具。
  • conda:跨平台的 Python 二进制包管理工具。
  • Curdling:管理 Python 包的命令行工具。
  • wheel:Python 分发的新标准,意在取代 eggs。

包仓库

本地 PyPI 仓库服务和代理。

  • warehouse:下一代 PyPI。
  • bandersnatch:PyPA 提供的 PyPI 镜像工具。
  • devpi:PyPI 服务和打包/测试/分发工具。
  • localshop:本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。

分发

打包为可执行文件以便分发。

  • PyInstaller:将 Python 程序转换成独立的执行文件(跨平台)。
  • cx_Freeze:将python程序转换为带有一个动态链接库的可执行文件。
  • dh-virtualenv:构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。
  • Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。
  • py2app:将 Python 脚本变为独立软件包(Mac OS X)。
  • py2exe:将 Python 脚本变为独立软件包(Windows)。
  • pynsist:一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python 本身。
  • pyarmor:一个用于加密 python 脚本的工具,也可以将加密后的脚本绑定到固件上,或设置已加密脚本的有效期。
  • shiv:一个命令行工具,可用于构建完全独立的 zip 应用(PEP 441 所描述的那种),同时包含了所有的依赖项。

构建工具

将源码编译成软件。

  • buildout:一个构建系统,从多个组件来创建,组装和部署应用。
  • BitBake:针对嵌入式 Linux 的类似 make 的构建工具。
  • fabricate:对任何语言自动找到依赖关系的构建工具。
  • PlatformIO:多平台命令行构建工具。
  • PyBuilder:纯 Python 实现的持续化构建工具。
  • SCons:软件构建工具。

交互式解析器

交互式 Python 解析器。

文件

文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。

  • aiofiles:基于 asyncio,提供文件异步操作。
  • imghdr:(Python 标准库)检测图片类型。
  • mimetypes:(Python 标准库)将文件名映射为 MIME 类型。
  • path.py:对 os.path 进行封装的模块。
  • pathlib:(Python3.4+ 标准库)跨平台的、面向对象的路径操作库。
  • python-magic:文件类型检测的第三方库 libmagic 的 Python 接口。
  • Unipath:用面向对象的方式操作文件和目录。
  • watchdog:管理文件系统事件的 API 和 shell 工具。
  • PyFilesystem2:Python 的文件系统抽象层。

日期和时间

操作日期和时间的类库。

  • arrow:更好的 Python 日期时间操作类库。
  • Chronyk:Python 3 的类库,用于解析手写格式的时间和日期。
  • dateutil:Python datetime 模块的扩展。
  • delorean:解决 Python 中有关日期处理的棘手问题的库。
  • maya:人性化的时间处理库。
  • pendulum:一个比 arrow 更具有明确的,可预测的行为的时间操作库。
  • PyTime:一个简单易用的 Python 模块,用于通过字符串来操作日期/时间。
  • pytz:现代以及历史版本的世界时区定义。将时区数据库引入 Python。
  • when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。
  • dateutil:Python 标准包 datetime 的扩展。
  • moment:一个处理日期/时间的库,灵感来自 Moment.js
  • pytz:支持跨平台时区计算,并将 tz database 引入 Python。

文本处理

用于解析和操作文本的库。

  • 通用
    • chardet:字符编码检测器,兼容 Python 2 和 Python 3。
    • difflib:(Python 标准库)帮助我们进行差异化比较。
    • ftfy:让 Unicode 文本更完整更连贯。
    • thefuzz:模糊字符串匹配。
    • Levenshtein:快速计算编辑距离以及字符串的相似度。
    • pangu.py:在中日韩语字符和数字字母之间添加空格。
    • pypinyin:汉字拼音转换工具 Python 版。
    • shortuuid:一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。
    • simplejson:Python 的 JSON 编码、解码器。
    • unidecode:Unicode 文本的 ASCII 转换形式 。
    • uniout:打印可读的字符,而不是转义的字符串。
    • xpinyin:一个用于把汉字转换为拼音的库。
    • pyfiglet:figlet 的 Python 实现。
    • flashtext:一个高效的文本查找替换库。
    • textdistance:支持 30 多种算法来计算序列之间的距离。
  • Slug 化
    • awesome-slugify:一个 Python slug 化库,可以保持 Unicode。
    • python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。
    • unicode-slugify:一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。
  • 解析器

特殊文本格式处理

一些用来解析和操作特殊文本格式的库。

  • 通用
    • tablib:一个用来处理中表格数据的模块。
  • Office
    • Marmir:把输入的 Python 数据结构转换为电子表单。
    • openpyxl:一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。
    • pyexcel:一个提供统一 API,用来读写,操作 Excel 文件的库。
    • python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。
    • python-pptx:可用于创建和修改 ppt 文件的 Python 库。
    • relatorio:模板化 OpenDocument 文件。
    • unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。
    • XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。
    • xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。
    • xlwt / xlrd:读写 Excel 文件的数据和格式信息。
    • docxtpl:通过 jinja2 模版编辑 docx 文档。
  • PDF
    • PDFMiner:一个用于从 PDF 文档中抽取信息的工具。
    • PyPDF2:一个可以分割,合并和转换 PDF 页面的库。
    • ReportLab:快速创建富文本 PDF 文档。
  • Markdown
    • Mistune:快速并且功能齐全的纯 Python 实现的 Markdown 解析器。
    • Python-Markdown:John Gruber’s Markdown 的 Python 版实现。
    • Python-Markdown2:纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。
  • YAML
    • PyYAML:Python 版本的 YAML 解析器。
  • CSV
    • csvkit:用于转换和操作 CSV 的工具。
  • Archive
    • unp:一个用来方便解包归档文件的命令行工具。

自然语言处理

用来处理人类语言的库。

  • NLTK:一个先进的平台,用以构建处理人类语言数据的 Python 程序。
  • gensim:人性化的话题建模库。
  • jieba:中文分词工具。
  • langid.py:独立的语言识别系统。
  • Pattern:Python 网络信息挖掘模块。
  • SnowNLP:一个用来处理中文文本的库。
  • TextBlob:为进行普通自然语言处理任务提供一致的 API。
  • TextGrocery:一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。
  • thulac:清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包。
  • polyglot:支持数百种语言的自然语言处理管道。
  • pytext:基于 PyTouch 的自然语言模型框架。
  • PyTorch-NLP:一个支持快速深度学习 NLP 原型研究的工具包。
  • spacy:Python 和 Cython 中用于工业级自然语言处理的库。
  • Stanza:斯坦福 NLP 集团的官方 Python 库,支持 60 多种语言。
  • funNLP:中文自然语言处理的工具和数据集。
  • pkuseg-python:一个支持对不同领域进行中文分词的工具箱。

文档

用以生成项目文档的库。

  • Sphinx:Python 文档生成器。
  • MkDocs:对 Markdown 友好的文档生成器。
  • pdoc:一个可以替换 Epydoc 的库,可以自动生成 Python 库的 API 文档。
  • Pycco:文学编程(literate-programming)风格的文档生成器。
  • readthedocs:一个基于 Sphinx/MkDocs 的在线文档托管系统,对开源项目免费开放使用。

配置

用来保存和解析配置的库。

  • configlogging 模块作者写的分级配置模块。
  • ConfigObj:INI 文件解析器,带验证功能。
  • ConfigParser:(Python 标准库) INI 文件解析器。
  • profig:通过多种格式进行配置,具有数值转换功能。
  • python-decouple:将设置和代码完全隔离。
  • hydra:一个优雅地配置复杂应用程序的框架。

命令行工具

用于创建命令行程序的库。

  • 命令行程序开发
    • cement:Python 的命令行程序框架。
    • click:一个通过组合的方式来创建精美命令行界面的包。
    • cliff:一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。
    • clint:Python 命令行程序工具。
    • docopt:Python 风格的命令行参数解析器。
    • Gooey:一条命令,将命令行程序变成一个 GUI 程序。
    • python-prompt-toolkit:一个用于构建强大的交互式命令行程序的库。
    • python-fire:Google 出品的一个基于 Python 类的构建命令行界面的库。
    • Pythonpy:在命令行中直接执行任何 Python 指令。
  • 终端呈现方式
    • asciimatics:跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级 API。
    • alive-progress:一款新的进度条,具有实时吞吐量信息以及非常酷的动画。
    • colorama:跨平台彩色终端文本。
    • bashplotlib:在终端中进行基本绘图。
    • rich:一个在终端中支持富文本和格式美化的 Python 库, 同时提供了RichHandler日志处理程序。
    • tqdm:一个可在循环和命令行中使用的快速、可扩展的进度条。
  • 生产力工具
    • aws-cli:Amazon Web Services 的通用命令行界面。
    • caniusepython3:判断是哪个项目妨碍你你移植到 Python 3。
    • cookiecutter:从 cookiecutters(项目模板)创建项目的一个命令行工具。
    • doitlive:一个用来在终端中进行现场演示的工具。
    • pyftpdlib:一个速度极快和可扩展的 Python FTP 服务库。
    • howdoi:通过命令行获取即时的编程问题解答。
    • PathPicker:从 bash 输出中选出文件。
    • percol:向 UNIX shell 传统管道概念中加入交互式选择功能。
    • thefuck:修正你之前的命令行指令。
    • try:一个极其简单的命令行工具,用来试用 python 库。
    • copier:用于呈现项目模板的库和命令行实用程序。
    • Invoke:用于管理面向 shell 的子进程,同时支持将可执行的 Python 代码组织成命令行可调用的状态。
    • tmuxp: tmux 会话管理器。
  • 高级 CLI
    • httpie:一个命令行 HTTP 客户端,cURL 的替代品,易用性更好。
    • iredis:支持自动补全和高亮显示的 redis 命令行工具。
    • kube-shell:K8S 命令行集成的 shell 工具。
    • litecli:支持自动补全和语法高亮的 SQLite 命令行工具。
    • mycli:支持自动补全和语法高亮的 MySQL 命令行客户端
    • pgcli:支持自动补全和语法高亮的 Postgres 命令行工具。
    • SAWS:一个加强版的 AWS 命令行。
  • Shell
    • xonsh:一种基于 python 的跨平台,面向 unix 的 shell 语言和命令提示符。

下载器

用来进行下载的库.

  • s3cmd:一个用来管理 Amazon S3 和 CloudFront 的命令行工具。
  • s4cmd:超级 S3 命令行工具,性能更加强劲。
  • you-get:一个 YouTube/Youku/Niconico 视频下载器,使用 Python 3 编写。
  • youtube-dl:一个小巧的命令行程序,用来下载 YouTube 视频。
  • akshare:为方便人使用而创建的金融数据接口库。

图像处理

用来操作图像的库.

  • pillow:Pillow 是一个更加易用版的 PIL
  • hmap:图像直方图映射。
  • imgSeek:一个使用视觉相似性搜索一组图片集合的项目。
  • nude.py:裸体检测。
  • python-barcode:不借助其他库在 Python 程序中生成条形码。
  • pygram:类似 Instagram 的图像滤镜。
  • python-qrcode:一个纯 Python 实现的二维码生成器。
  • Quads:基于四叉树的计算机艺术。
  • scikit-image:一个用于(科学)图像处理的 Python 库。
  • thumbor:一个小型图像服务,具有剪裁,尺寸重设和翻转功能。
  • wandMagickWand 的 Python 绑定。MagickWand 是 ImageMagick 的 C API 。
  • face_recognition:简单易用的 Python 人脸识别库。
  • pagan:基于输入和哈希的复古风图标(头像)生成工具。
  • PyMatting:支持 alpha matting 的库。
  • pywal:由图像生成配色方案的工具。
  • pyvips:低内存消耗且快速的图像处理库。

OCR

光学字符识别库。

音频

用来操作音频的库

  • audiolazy:Python 的数字信号处理包。
  • audioread:交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。
  • beets:一个音乐库管理工具及 MusicBrainz 标签添加工具。
  • dejavu:音频指纹提取和识别。
  • django-elastic-transcoder:Django + Amazon Elastic Transcoder
  • eyeD3:一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。
  • id3reader:一个用来读取 MP3 元数据的 Python 模块。
  • m3u8:一个用来解析 m3u8 文件的模块。
  • mutagen:一个用来处理音频元数据的 Python 模块。
  • pydub:通过简单、简洁的高层接口来操作音频文件。
  • pyechonestEcho Nest API 的 Python 客户端。
  • talkbox:一个用来处理演讲/信号的 Python 库。
  • TimeSide:开源 web 音频处理框架。
  • tinytag:一个用来读取 MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。
  • mingus:一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。
  • kapre:Keras 音频处理器。
  • librosa:音频音乐分析 Python 库。
  • matchering:用于音频母带制作的库。
  • pyAudioAnalysis:音频特征提取,分类,分段和应用。
  • beets:一个音乐库管理器和 MusicBrainz 标记器。

Video

用来操作视频和 GIF 的库。

  • moviepy:一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。
  • scikit-video:SciPy 视频处理常用程序。
  • vidgear: 强大的多线程视频处理框架。

地理位置

地理编码地址以及用来处理经纬度的库。

  • GeoDjango:世界级地理图形 web 框架。
  • GeoIP:MaxMind GeoIP Legacy 数据库的 Python API。
  • geojson:GeoJSON 的 Python 绑定及工具。
  • geopy:Python 地址编码工具箱。
  • GeoIP2:GeoIP2 Webservice 客户端与数据库 Python API。
  • django-countries:一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。
  • pygeoip:Python GeoIP 接口。

HTTP

使用 HTTP 的库。

  • aiohttp:基于 asyncio 的异步 HTTP 网络库。
  • requests:人性化的 HTTP 请求库。
  • grequests:requests 库 + gevent ,用于异步 HTTP 请求。
  • httplib2:全面的 HTTP 客户端库。
  • treq:类似 requests 的 Python API 构建于 Twisted HTTP 客户端之上。
  • urllib3:一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。
  • httpx:下一代 Python HTTP 客户端。

数据库

Python 实现的数据库。

  • pickleDB:一个简单,轻量级键值储存数据库。
  • PipelineDB:流式 SQL 数据库。
  • TinyDB:一个微型的,面向文档型数据库。
  • ZODB:一个 Python 原生对象数据库。一个键值和对象图数据库。

数据库驱动

用来连接和操作数据库的库。

  • MySQL:awesome-mysql 系列
    • aiomysql:基于 asyncio 的异步 MySQL 数据库操作库。
    • mysql-python:Python 的 MySQL 数据库连接器。
    • ysqlclient:mysql-python 分支,支持 Python 3。
    • oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs。
    • PyMySQL:纯 Python MySQL 驱动,兼容 mysql-python。
  • PostgreSQL
    • psycopg2:Python 中最流行的 PostgreSQL 适配器。
    • queries:psycopg2 库的封装,用来和 PostgreSQL 进行交互。
    • txpostgres:基于 Twisted 的异步 PostgreSQL 驱动。
  • 其他关系型数据库
    • apsw:另一个 Python SQLite 封装。
    • dataset:在数据库中存储 Python 字典
    • pymssql:一个简单的 Microsoft SQL Server 数据库接口。
  • NoSQL 数据库
    • asyncio-redis:基于 asyncio 的 redis 客户端 (PEP 3156)。
    • cassandra-python-driver:Cassandra 的 Python 驱动。
    • HappyBase:一个为 Apache HBase 设计的,对开发者友好的库。
    • Plyvel:一个快速且功能丰富的 LevelDB 的 Python 接口。
    • py2neo:Neo4j restful 接口的 Python 封装客户端。
    • pycassa:Cassandra 的 Python Thrift 驱动。
    • PyMongo:MongoDB 的官方 Python 客户端。
    • redis-py:Redis 的 Python 客户端。
    • telephus:基于 Twisted 的 Cassandra 客户端。
    • txRedis:基于 Twisted 的 Redis 客户端。
    • kafka-python:Apache Kafka Python 客户端。
  • 异步客户端
    • motor:支持 MongoDB 的异步 Python 驱动程序。

ORM

实现对象关系映射或数据映射技术的库。

  • 关系型数据库
    • Django Models:Django 的一部分。
    • SQLAlchemy:Python SQL 工具以及对象关系映射工具。
    • awesome-sqlalchemy 系列
    • Peewee:一个小巧,富有表现力的 ORM。
    • PonyORM:提供面向生成器的 SQL 接口的 ORM。
    • python-sql:编写 Python 风格的 SQL 查询。
    • dataset:在数据库中存储字典,支持 SQLite,MySQL 和 PostgreSQL。
    • orator:Orator ORM,提供了一个简单而美观的 ActiveRecord 实现。
    • orm:一个异步的 ORM。
    • pony:提供面向生成器的SQL接口的ORM。
    • pydal:纯 Python 数据库抽象接口层。
  • NoSQL 数据库
  • 其他
    • butterdb:Google Drive 电子表格的 Python ORM。

Web 框架

全栈 Web 框架。

  • Django:Python 界最流行的 web 框架。
  • Flask:一个 Python 微型框架。
  • Pyramid:一个小巧,快速,接地气的开源 Python web 框架。
  • Bottle:一个快速小巧,轻量级的 WSGI 微型 web 框架。
  • CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有 WSGI 线程池。
  • TurboGears:一个可以扩展为全栈解决方案的微型框架。
  • web.py:一个 Python 的 web 框架,既简单,又强大。
  • web2py:一个全栈 web 框架和平台,专注于简单易用。
  • Tornado:一个 web 框架和异步网络库。
  • sanic:基于 Python3.5+ 的异步网络框架。
  • starlette: 一款轻量级,高性能的 ASGI 框架。
  • Masonite:以开发者为中心的现代 Python Web 框架。

WebSocket

Web socket 相关库。

  • autobahn-python:适用于 Twisted 和 asyncio 的 Python WebSocket 和 WAMP。
  • channels:开发者友好的 Django 异步工具。
  • websockets:一个用于构建 WebSocket 服务器和客户端的库,着重于正确性和简单性。

权限

允许或拒绝用户访问数据或功能的库。

  • Carteblanche:站在用户和设计者角度开发的一个代码对齐模块,很好地处理了代码导航及权限。
  • django-guardian:Django 1.2+ ,实现了单个对象权限。
  • django-rules:一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。

CMS

内容管理系统。

  • odoo-cms:一个开源的,企业级 CMS,基于 odoo。
  • django-cms:一个开源的,企业级 CMS,基于 Django。
  • djedi-cms:一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。
  • FeinCMS:基于 Django 构建的最先进的内容管理系统之一。
  • Kotti:一个高级的,Python 范的 web 应用框架,基于 Pyramid 构建。
  • Mezzanine:一个强大的,持续的,灵活的内容管理平台。
  • Opps:一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。
  • Plone:一个构建于开源应用服务器 Zope 之上的 CMS。
  • Quokka:灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。
  • Wagtail:一个 Django 内容管理系统。
  • Widgy:最新的 CMS 框架,基于 Django。
  • indico:一个功能丰富的事件管理系统,由 @CERN 开发。

电子商务

用于电子商务以及支付的框架和库。

  • django-oscar:一个用于 Django 的开源的电子商务框架。
  • django-shop:一个基于 Django 的店铺系统。
  • Cartridge:一个基于 Mezzanine 构建的购物车应用。
  • shoop:一个基于 Django 的开源电子商务平台。
  • alipay:非官方的 Python 支付宝 API。
  • merchant:一个可以接收来自多种支付平台支付的 Django 应用。
  • money:一个货币类库。带有可选的 CLDR 后端本地化格式,提供可扩展的货币兑换解决方案。
  • python-currencies:显示货币格式以及它的数值。
  • forex-python:外汇汇率,比特币价格指数和货币换算。
  • saleor:一款兼容 Django 的电子商务平台。

RESTful API

用来开发 RESTful APIs 的库

  • Django
  • Flask
    • flask-api:为 flask 开发的,可浏览 Web APIs 。
    • flask-restful:为 flask 快速创建 REST APIs 。
    • flask-restless:为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。
    • flask-api-utils:为 Flask 处理 API 表示和验证。
    • eve:REST API 框架,由 Flask, MongoDB 等驱动。
  • Pyramid
    • cornice:一个 Pyramid 的 REST 框架 。
  • 与框架无关的
    • falcon:一个用来建立云 API 和 web app 后端的高性能框架。
    • sandman:为现存的数据库驱动系统自动创建 REST APIs 。
    • restless:框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。
    • ripozo:快速创建 REST/HATEOAS/Hypermedia APIs。
    • apistar:专为Python 3设计的智能 Web API 框架。
    • fastapi:一个现代,快速,基于标准 Python 类型注解的的 web框架,可使用 Python3.6+ 版本构建 API。
    • hug:一个为纯净公开的 API 打造的 Python 3 框架。
    • sandman2:为数据库驱动的系统自动生成 REST API。
    • vibora:快速高效且支持异步的 Web 框架,灵感来源于 Flask。

验证

实现验证方案的库。

  • OAuth
    • authlib:一个强大的Python库,用来构建 OAuth 和 OpenID 服务端。包括:JWS, JWK, JWA, JWT。
    • Authomatic:简单但是强大的框架,身份验证/授权客户端。
    • django-allauth:Django 的验证应用。
    • django-oauth-toolkit:为 Django 用户准备的 OAuth2。
    • django-oauth2-provider:为 Django 应用提供 OAuth2 接入。
    • Flask-OAuthlib:OAuth 1.0/a, 2.0 客户端实现,供 Flask 使用。
    • OAuthLib:一个 OAuth 请求-签名逻辑通用、 完整的实现。
    • python-oauth2:一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。
    • python-social-auth:一个设置简单的社会化验证方式。
    • rauth:OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。
    • sanction:一个超级简单的 OAuth2 客户端实现。
  • 其他
    • PyJWT:JSON Web 令牌草案 01。
    • python-jws:JSON Web 签名草案 02 的实现。
    • python-jwt:一个用来生成和验证 JSON Web 令牌的模块。
    • python-jose:python 版 JOSE 实现。

模板引擎

模板生成和词法解析的库和工具。

  • Jinja2:一个现代的,对设计师友好的模板引擎。
  • Chameleon:一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。
  • Genshi:Python 模板工具,用以生成 web 感知的结果。
  • Mako:Python 平台的超高速轻量级模板。

队列

处理事件以及任务队列的库。

  • celery:一个异步任务队列/作业队列,基于分布式消息传递
  • daramatiq:适用于Python 3的快速可靠的后台任务处理库。
  • huey:小型多线程任务队列。
  • mrq:一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。
  • rq:简单的 Python 作业队列。
  • simpleq:一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。

搜索

对数据进行索引和执行搜索查询的库和软件。

动态消息

用来创建用户活动的库。

Web 资源管理

管理、压缩、缩小网站资源的工具。

  • django-compressor:将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。
  • django-pipeline:Django 的资源包装库。
  • django-storages:一个针对 Django 的自定义存储后端的工具集合。
  • fanstatic:打包、优化,并且把静态文件依赖作为 Python 的包来提供。
  • File Conveyor:一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。
  • Flask-Assets:帮你将 web 资源整合到你的 Flask app 中。
  • jinja-assets-compressor:一个 Jinja 扩展,用来编译和压缩你的资源。
  • webassets:为你的静态资源打包、优化和管理生成独一无二的缓存 URL。

缓存

缓存数据的库。

  • Beaker:一个缓存和会话库,可以用在 web 应用和独立 Python 脚本和应用上。
  • django-cache-machine:Django 模型的自动缓存和失效。
  • django-cacheops:具有自动颗粒化事件驱动失效功能的 ORM。
  • django-viewlet:渲染模板,同时具有额外的缓存控制功能。
  • dogpile.cache:dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。
  • HermesCache:Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。
  • johnny-cache:django 应用缓存框架。
  • pylibmclibmemcached 接口的 Python 封装。
  • python-diskcache:SQLite 和文件支持的缓存后端,具有比 memcached 和 redis 更快的查找速度。

电子邮件

用来发送和解析电子邮件的库。

  • django-celery-ses:带有 AWS SES 和 Celery 的 Django email 后端。
  • envelopes:供人类使用的电子邮件库。
  • flanker:一个 email 地址和 Mime 解析库。
  • imbox:Python IMAP 库。
  • inbox.py:Python SMTP 服务器。
  • inbox:一个开源电子邮件工具箱。
  • lamson:Python 风格的 SMTP 应用服务器。
  • mailjet:Mailjet API 实现,用来提供批量发送邮件,统计等功能。
  • marrow.mailer:高性能可扩展邮件分发框架。
  • modoboa:一个邮件托管和管理平台,具有现代的、简约的 Web UI。
  • pyzmail:创建,发送和解析电子邮件。
  • Talon:Mailgun 库,用来抽取信息和签名。
  • yagmail:yagmail是一个GMAIL / SMTP客户端,旨在使其尽可能简单地发送电子邮件。
  • salmon:一个 Python 邮件服务器。
  • mailer:一款高性能可扩展的邮件投递框架。

国际化

用来进行国际化的库。

  • Babel:一个 Python 的国际化库。
  • Korean:一个韩语词态库。
  • PyICU:一个封装了 ICU C++ 库的 Python 扩展。

URL 处理

解析 URLs 的库

  • furl:一个让处理 URL 更简单小型 Python 库。
  • purl:一个简单的,不可变的 URL 类,具有简洁的 API 来进行询问和处理。
  • pyshorteners:一个纯 Python URL 缩短库。
  • shorturl:生成短小 URL 和类似 bit.ly 短链的 Python 实现。
  • webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado 和 Pyramid。

HTML 处理

处理 HTML 和 XML 的库。

  • BeautifulSoup:以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。
  • bleach:一个基于白名单的 HTML 清理和文本链接库。
  • cssutils:一个 Python 的 CSS 库。
  • html5lib:一个兼容标准的 HTML 文档和片段解析及序列化库。
  • lxml:一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。
  • MarkupSafe:为 Python 实现 XML/HTML/XHTML 标记安全字符串。
  • pyquery:一个解析 HTML 的库,类似 jQuery。
  • requests-html:人性化的,Pythonic 的 HTML 解析库。
  • untangle:将 XML 文档转换为 Python 对象,使其可以方便的访问。
  • xhtml2pdf:HTML/CSS 转 PDF 工具。
  • xmltodict:像处理 JSON 一样处理 XML。
  • WeasyPrint:用于HTML和CSS的可视化呈现引擎,并可以导出为 PDF。
  • xmldataset:简单 XML 解析。

爬取网络站点的库

  • Scrapy:一个快速高级的屏幕爬取及网页采集框架。
  • ScrapydWeb:一个用于 Scrapyd 集群管理的全功能 web UI,支持 Scrapy 日志分析和可视化,自动打包,定时器任务和邮件通知等特色功能。
  • cola:一个分布式爬虫框架。
  • Demiurge:基于 PyQuery 的爬虫微型框架。
  • feedparser:通用 feed 解析器。
  • Grab:站点爬取框架。
  • MechanicalSoup:用于自动和网络站点交互的 Python 库。
  • portia:Scrapy 可视化爬取。
  • pyspider:一个强大的爬虫系统。
  • RoboBrowser:一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。

网页内容提取

用于进行网页内容提取的库。

  • Haul:一个可以扩展的图像爬取工具。
  • html2text:将 HTML 转换为 Markdown 格式文本。
  • lassie:人性化的网页内容检索库。
  • micawber:一个小型网页内容提取库,用来从 URLs 提取富内容。
  • newspaper:使用 Python 进行新闻提取,文章提取以及内容策展。
  • opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python 模块。
  • python-goose:HTML 内容/文章提取器(python2)。
  • goose3:HTML 内容/文章提取器(python3)。
  • python-readability:arc90 公司 readability 工具的 Python 高速端口。
  • sanitize:为杂乱的数据世界带来调理性。
  • sumy:一个为文本文件和 HTML 页面进行自动摘要的模块。
  • textract:从任何格式的文档中提取文本,Word,PowerPoint,PDFs 等等。

表单

进行表单操作的库。

  • Deform:Python HTML 表单生成库,受到了 formish 表单生成库的启发。
  • django-bootstrap3:集成了 Bootstrap 3 的 Django。
  • django-bootstrap4:集成了 Bootstrap 4 的 Django。
  • django-crispy-forms:一个 Django 应用,他可以让你以一种非常优雅且 DRY (Don't repeat yourself) 的方式来创建美观的表单。
  • django-remote-forms:一个平台独立的 Django 表单序列化工具。
  • WTForms:一个灵活的表单验证和呈现库。
  • WTForms-JSON:一个 WTForms 扩展,用来处理 JSON 数据。

数据验证

数据验证库。多用于表单验证。

  • Cerberus:一个映射验证器(mappings-validator)。支持多种规则,提供归一化功能,可以方便地定制为 Python 风格的 schema 定义。
  • colander:一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。
  • kmatch:一种用于匹配/验证/筛选 Python 字典的语言。
  • schema:一个用于对 Python 数据结构进行验证的库。
  • Schematics:数据结构验证。
  • valideer:轻量级可扩展的数据验证和适配库。
  • voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。
  • jsonschemaJSON Schema 的 python 实现,用于 JSON 数据的验证。

序列化

复杂数据类型序列化相关库。

反垃圾技术

帮助你和电子垃圾进行战斗的库。

标记

用来进行标记的库。

管理面板

管理界面库。

  • Ajenti:一个你的服务器值得拥有的管理面板。
  • django-suit:Django 管理界面的一个替代品(仅对于非商业用途是免费的)。
  • django-xadmin:Django admin 的一个替代品,具有很多不错的功能。
  • flask-admin:一个用于 Flask 的简单可扩展的管理界面框架。
  • flower:一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。
  • Grappelli:Django 管理界面的一个漂亮的皮肤。
  • Wooey:一个 Django 应用,可以为 Python 脚本创建 web 用户界面。
  • django-grappelli:拥有绚丽外观的 Django Admin 界面。
  • django-jet:具有改进功能的现代响应式 Django 管理界面模板。
  • jet-bridge:管理面板框架,适用于任何具有良好 UI 的应用(例如 Django)。

Serverless 框架

使用 Python 开发 Serverless 模型相关的库。

  • python-lambda :在 AWS Lambda 开发和部署 Python 代码的工具包。
  • Zappa:在 AWS Lambda 和 API Gateway 部署 WSGI 应用的工具。

静态站点生成器

静态站点生成器是一个软件,它把文本和模板作为输入,然后输出 HTML 文件。

  • Pelican:使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。
  • Cactus:为设计师设计的静态站点生成器。
  • Hyde:基于 Jinja2 的静态站点生成器。
  • Nikola:一个静态网站和博客生成器。
  • Tinkerer:Tinkerer 是一个博客引擎/静态站点生成器,由 Sphinx 驱动。
  • Lektor:一个简单易用的静态 CMS 和博客引擎。
  • makesite:简单轻量的站点/博客生成器(小于 130 行代码)。

进程

操作系统进程启动及通信库。

并发和并行

用以进行并发和并行操作的库。

  • multiprocessing:(Python 标准库) 基于进程的“线程”接口。
  • threading:(Python 标准库)更高层的线程接口。
  • eventlet:支持 WSGI 的异步框架。
  • gevent:一个基于协程的 Python 网络库,使用 greenlet
  • Tomorrow:用于产生异步代码的神奇的装饰器语法实现。
  • uvloop:在 libuv 之上超快速实现 asyncio 事件循环。
  • concurrent.futures:(Python 标准库) 异步执行可调用对象的高级接口。
  • gevent:使用 greenlet 且基于协程的 Python 网络库。
  • scoop:支持在 Python 中进行可伸缩并行操作。

网络

用于网络编程的库。

  • asyncio:(Python 标准库) 异步 I/O,事件循环,协程以及任务。
  • trio:异步并发和 I/O 友好的库。
  • Twisted:一个事件驱动的网络引擎。
  • pulsar:事件驱动的并发框架。
  • diesel:基于 Greenlet 的事件 I/O 框架。
  • pyzmq:一个 ZeroMQ 消息库的 Python 封装。
  • Toapi:一个轻巧,简单,快速的 Flask 库,致力于为所有网站提供 API 服务。
  • txZMQ:基于 Twisted 的 ZeroMQ 消息库的 Python 封装。

WebSocket

帮助使用 WebSocket 的库。

WSGI 服务器

兼容 WSGI 的 web 服务器

  • gunicorn:Pre-forked, 部分是由 C 语言编写的。
  • uwsgi:uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务,由 C 语言编写。
  • bjoern:异步,非常快速,由 C 语言编写。
  • fapws3:异步 (仅对于网络端),由 C 语言编写。
  • meinheld:异步,部分是由 C 语言编写的。
  • netius:异步,非常快速。
  • paste:多线程,稳定,久经考验。
  • rocket:多线程。
  • waitress:多线程,是它驱动着 Pyramid 框架。
  • Werkzeug:一个 WSGI 工具库,驱动着 Flask,而且可以很方便大嵌入到你的项目中去。

ASGI 服务器

兼容 ASGI 的 web 服务器。

  • daphne:用于 ASGI 和 ASGI-HTTP 的,支持 HTTP,HTTP2 和 WebSocket 协议的服务器。
  • uvicorn:使用 uvloop 和 httptools 实现的闪电般快速的 ASGI 服务器。

RPC 服务器

兼容 RPC 的服务器。

密码学

  • cryptography:这个软件包意在提供密码学基本内容和方法提供给 Python 开发者。
  • hashids:在 Python 中实现 hashids 。
  • Paramiko:SSHv2 协议的 Python (2.6+, 3.3+) ,提供客户端和服务端的功能。
  • Passlib:安全密码存储/哈希库。
  • PyCrypto:Python 密码学工具箱。
  • PyNacl:网络和密码学(NaCl) 库的 Python 绑定。

图形用户界面

用来创建图形用户界面程序的库。

  • curses:内建的 ncurses 封装,用来创建终端图形用户界面。
  • enaml:使用类似 QML 的 Declaratic 语法来创建美观的用户界面。
  • kivy:一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS 平台上。
  • pyglet:一个 Python 的跨平台窗口及多媒体库。
  • PyQt:跨平台用户界面框架 Qt 的 Python 绑定 ,支持 Qt v4 和 Qt v5。
  • PySide:跨平台用户界面框架 Qt 的 Python 绑定 ,支持 Qt v4。
  • Tkinter:Tkinter 是 Python GUI 的一个事实标准库。
  • Toga:一个 Python 原生的,操作系统原生的 GUI 工具包。
  • urwid:一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。
  • wxPython:wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。
  • PyGObject:GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定。
  • Flexx:Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。
  • Eel:用于制作简单离线 HTML/JS GUI 应用的库。
  • PySimpleGUI:tkinter,Qt,WxPython 和 Remi 的封装。
  • pywebview:围绕网页视图组件的轻量级跨平台的原生包装。
  • DearPyGui:一个简单的可使用 GPU 加速的 Python GUI 框架。

游戏开发

超赞的游戏开发库。

  • Cocos2d:cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。
  • Panda3D:由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用 C++ 编写, 针对 Python 进行了完全的封装。
  • Pygame:Pygame 是一组 Python 模块,用来编写游戏。
  • PyOgre:Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。
  • PyOpenGL:OpenGL 的 Python 绑定及其相关 APIs。
  • PySDL2:SDL2 库的封装,基于 ctypes。
  • RenPy:一个视觉小说(visual novel)引擎。
  • Arcade:一个现代 Python 框架,用于制作具有引人入胜的图形与声音的游戏。
  • Harfang3D:支持3D,VR 与游戏开发的 Python 框架。

日志

用来生成和操作日志的库。

  • logging:(Python 标准库) 为 Python 提供日志功能。
  • logbook:Logging 库的替代品。
  • Eliot:为复杂的和分布式系统创建日志。
  • Raven:Sentry 的 Python 客户端。
  • Sentry:实时记录和收集日志的服务器。
  • sentry-python:Python 版 Sentry SDK。
  • loguru:旨在带来愉悦体验的 Python 日志库。
  • structlog:结构化日志,让日志变得简单。

测试

进行代码库测试和生成测试数据的库。

  • 测试框架
    • unittest:(Python 标准库) 单元测试框架。
    • nose:nose 扩展了 unittest 的功能。
    • nose2 nose的继任者,基于 unittest2
    • contexts:一个 Python 3.3+ 的 BDD 框架。受到 C# Machine.Specifications 的启发。
    • hypothesis:Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。
    • mamba:Python 的终极测试工具, 拥护 BDD。
    • pyshould:Should 风格的断言,基于 PyHamcrest
    • pytest:一个成熟的全功能 Python 测试工具。
    • green:干净,多彩的测试工具。
    • pyvows:BDD 风格的测试工具,受 Vows.js 的启发。
    • Robot Framework:一个通用的自动化测试框架。
    • tox:自动化测试与发布的工具,支持多个 Python 版本。
  • GUI / Web 测试
    • SeleniumSelenium WebDriver 的 Python 绑定。
    • PyAutoGUI:PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。
    • locust:使用 Python 编写的,可扩展的用户加载测试工具。
    • sixpack:一个和语言无关的 A/B 测试框架。
    • splinter:开源的 web 应用测试工具。
    • Schemathesis:基于属性的自动测试工具,用于测试使用 Open API / Swagger 规范构建的 Web 应用程序。
  • Mock 测试
    • mock:(Python 标准库) 一个用于伪造测试的库。
    • doublex:Python 的一个功能强大的 doubles 测试框架。
    • freezegun:通过伪造日期模块来生成不同的时间。
    • httmock:针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。
    • httpretty:Python 的 HTTP 请求 mock 工具。
    • responses:伪造 Python 中的 requests 库的一个通用库。
    • VCR.py:在你的测试中记录和重放 HTTP 交互。
    • mocket:gevent/asyncio/SSL 支持的 socket mock 框架。
  • 对象工厂
    • factoryboy:一个 Python 用的测试固件 (test fixtures) 替代库。
    • mixer:另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。
    • modelmommy:为 Django 测试创建随机固件。
  • 代码覆盖率
    • coverage:代码覆盖率测量。
    • Codecov:一个代码覆盖率测试工具,为开源项目提供免费代码覆盖率测试服务。
  • 伪数据
    • faker:一个 Python 库,用来生成伪数据。
    • fake2db:伪数据库生成器。
    • mimesis:一个帮助你生成伪数据的 Python 库。
    • radar:生成随机的日期/时间。
  • 错误处理
    • FuckIt.py:使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。

渗透测试

渗透测试相关框架和工具。

  • fsociety:一款渗透测试框架。
  • setoolkit:社会工程工具包。
  • sqlmap:自动 SQL 注入和数据库接管工具。

代码分析和 Lint 工具

进行代码分析、解析和操作代码库的库和工具。

  • 代码分析

    • coala:语言独立和易于扩展的代码分析应用程序。
    • code2flow:把你的 Python 和 JavaScript 代码转换为流程图。
    • pycallgraph:这个库可以把你的 Python 应用的流程(调用图)进行可视化。
    • pysonar2:Python 类型推断和检索工具。
    • prospector:分析 Python 代码的工具。
    • vulture:用于发现和分析无效 Python 代码的工具。
  • Lint 工具

    • Flake8:模块化源码检查工具,提供与 pycodestylepyflakes 、McCabe 相关的装饰器。

    • Pylint:一个完全可定制的源码分析器。

    • YAPF:Google 的 Python 代码格式化工具。

    • pylama:Python 和 JavaScript 的代码审查工具。

    • wemake-python-styleguide:有史以来最严格的 Python 代码审查工具。

  • 代码格式化

    • autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。
    • black:一个坚定的 Python 代码格式化工具。
    • isort:用于纠正包导入顺序的 Python 库。
  • 静态类型检查,也可以参考 awesome-python-typing

    • mypy:在编译期间检查变量类型。
    • pyre-check:性能类型检查。
    • typeshed:带有静态类型的Python库存根的集合。
  • 静态类型注释生成器

    • MonkeyType:通过收集运行时的类型来为 Python 生成静态类型注释的系统。
    • pyannotate:自动生成符合 PEP-484 的注解。
    • pytype:检查和推断 Python 代码中的类型,无需添加注解。

调试工具

用来进行代码调试的库。

  • 调试器

    • ipdb:IPython 启用的 pdb
    • pudb:全屏,基于控制台的 Python 调试器。
    • pdb++:另一种 pdb 的替代。
    • pyringe:可以在 Python 进程中附加和注入代码的调试器。
    • wdb:一个奇异的 web 调试器,通过 WebSockets 工作。
    • winpdb:一个具有图形用户界面的 Python 调试器,可以进行远程调试,基于 rpdb2。
  • 追踪器

    • lptrace:为 Python 程序打造的 strace
    • manhole:调试UNIX套接字连接,并显示所有线程的堆栈跟踪和交互式提示。
    • pyringe:能够附加到 Python 进程并将代码注入Python进程的调试器。
    • python-hunter:一个灵活的代码追踪工具包。
  • 性能分析器

  • 其他

科学计算和数据分析

用来进行科学计算和数据分析的库。

  • astropy:一个天文学 Python 库。
  • bcbio-nextgen:这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。
  • bccb:生物分析相关代码集合。
  • Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。
  • blaze:NumPy 和 Pandas 的大数据接口。
  • cclib:一个用来解析和解释计算化学软件包输出结果的库。
  • NetworkX:一个为复杂网络设计的高性能软件。
  • Neupy:执行和测试各种不同的人工神经网络算法。
  • NumPy:使用 Python 进行科学计算的基础包。
  • Open Babel:一个化学工具箱,用来描述多种化学数据。
  • Open Mining:使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。
  • orange:通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。
  • Pandas:提供高性能,易用的数据结构和数据分析工具。
  • PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。
  • PyMC:马尔科夫链蒙特卡洛采样工具。
  • RDKit:化学信息学和机器学习软件。
  • SciPy:由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。
  • statsmodels:统计建模和计量经济学。
  • SymPy:一个用于符号数学的 Python 库。
  • zipline:一个 Python 算法交易库。
  • Bayesian-belief-networks:优雅的贝叶斯理念网络框架。
  • AWS Data Wrangler:AWS 平台上使用的 Pandas。
  • Optimus:在使用 PySpark 时,让敏捷数据科学工作流程变得简单。
  • Colour:大量色彩理论转换和算法的实现。
  • Karate Club:用于图形结构化数据的无监督机器学习工具箱。
  • NIPY:神经影响学工具箱集合。
  • ObsPy:地震学 Python 工具箱。
  • QuTiP:Python 版 Quantum 工具箱。
  • SimPy:一个基于过程的离散事件模拟框架。

数据可视化

进行数据可视化的库。 参见:awesome-javascript

  • matplotlib:一个 Python 2D 绘图库。
  • bokeh:用 Python 进行交互式 web 绘图。
  • ggplot:ggplot2 给 R 提供的 API 的 Python 版本。
  • plotly:协同 Python 和 matplotlib 工作的 web 绘图库。
  • pyecharts:基于百度 Echarts 的数据可视化库。
  • pygal:一个 Python SVG 图表创建工具。
  • pygraphviz:Graphviz 的 Python 接口。
  • PyQtGraph:交互式实时 2D/3D/ 图像绘制及科学/工程学组件。
  • SnakeViz:一个基于浏览器的 Python's cProfile 模块输出结果查看工具。
  • vincent:把 Python 转换为 Vega 语法的转换工具。
  • VisPy:基于 OpenGL 的高性能科学可视化工具。
  • Altair:用于 Python 的声明式统计可视化库。
  • bqplot:Jupyter Notebook 的交互式绘图库。
  • Cartopy:具有 matplotlib 支持的 Python 制图库。
  • Dash:构建在 Flask、React 和 Plotly 之上,旨在用于分析 Web 应用程序。
  • diagrams:用图表作为代码。
  • plotnine:基于ggplot2的Python图形语法。
  • PyGraphviz: Graphviz 的 Python 接口。
  • Seaborn:使用 Matplotlib 进行统计数据可视化。

计算机视觉

计算机视觉相关库。

  • OpenCV:开源计算机视觉库。
  • pyocr:Tesseract 和 Cuneiform 的包装库。
  • pytesseractGoogle Tesseract OCR 的另一包装库。
  • SimpleCV:一个用来创建计算机视觉应用的开源框架。
  • EasyOCR:支持40多种语言的即用型 OCR。
  • Face Recognition:简单的面部识别库。
  • Kornia:PyTorch 的开源差异化计算机视觉库。
  • tesserocr:另一个简单的,兼容 Pillow 的 tesseract-ocr API 装饰器,可用于 OCR。

深度学习

神经网络和深度学习相关框架。 也可以参考 awesome-deep-learning

  • Caffe:一个 Caffe 的 python 接口。
  • Caffe2:一个轻量级的,模块化的,可扩展的深度学习框架。
  • keras:以 tensorflow/theano/CNTK 为后端的深度学习封装库,快速上手神经网络。
  • MXNet:一个高效和灵活的深度学习框架。
  • Pytorch:一个具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架。
  • SerpentAI:游戏代理框架,可使用任意视频游戏作为深度学习沙箱。
  • Theano:一个快速数值计算库。
  • TensorFlow:谷歌开源的最受欢迎的深度学习框架。
  • skflow:一个 TensorFlow 的简化接口(模仿 scikit-learn)。
  • hebel:GPU 加速的深度学习库。
  • pydeep:Python 深度学习库。

机器学习

机器学习相关库,也可以参考 awesome-machine-learning

  • Crab:灵活、快速的推荐引擎。
  • NuPIC:智能计算 Numenta 平台。
  • pattern:Python 网络挖掘模块。
  • PyBrain:另一个 Python 机器学习库。
  • Pylearn2:一个基于 Theano 的机器学习库。
  • python-recsys:一个用来实现推荐系统的 Python 库。
  • scikit-learn:基于 SciPy 构建的机器学习 Python 模块。
  • vowpalporpoise:轻量级 Vowpal Wabbit 的 Python 封装。
  • gym:开发和比较强化学习算法的工具包。
  • H2O:开源快速可扩展的机器学习平台。
  • Metrics:机器学习的评估指标。
  • vowpal_porpoise:Python 版 Vowpal Wabbit 装饰器。
  • xgboost:可扩展,便携式和分布式梯度提升库。
  • MindsDB:MindsDB 是现有数据库的开源 AI 层,可让使用标准查询轻松地进行开发,训练和部署最新的机器学习模型。

推荐系统

用于构建推荐系统的相关库。

  • annoy:对 C++/Python 实现的近似近邻算法进行了内存优化。
  • fastFM:Factorization Machine 相关库。
  • implicit:对隐式数据集进行协作过滤的快速 Python 实现。
  • libffm:Field-aware Factorization Machine (FFM) 相关库。
  • lightfm:很多流行的推荐算法的 Python 实现。
  • spotlight:使用 PyTorch 实现的深度推荐模型。
  • Surprise:用于构建和分析推荐系统的科学工具。
  • tensorrec:TensorFlow 的推荐引擎框架。

分布式计算

分布式计算相关的框架和库。

  • dpark:Spark 的 Python 克隆版,一个类似 MapReduce 的框架。
  • dumbo:这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。
  • luigi:这个模块帮你构建批处理作业的复杂流水线。
  • mrjob:在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。
  • dask:用于分析计算的灵活的并行计算库。
  • PySpark:Spark 的 Python API 。
  • Ray:一个用于并行和分布式 Python 的系统,它统一了机器学习生态系统。
  • faust:一个 Python 流处理库,核心思想来源 Kafka Streams
  • streamparse:运行针对事实数据流的 Python 代码。集成了 Apache Storm
  • mars:是基于张量的,用于进行大规模数据计算的统一计算框架。

函数式编程

使用 Python 进行函数式编程。

  • CyToolz:Toolz 的 Cython 实现:高性能函数式工具。
  • fn.py:在 Python 中进行函数式编程:实现了一些享受函数式编程缺失的功能。
  • funcy:炫酷又实用的函数式工具。
  • Toolz:一组用于迭代器,函数和字典的函数式编程工具。
  • Coconut:为了简单、优雅、更 Pythonic 的函数式编程而构建的 Python 变体。
  • more-itertools:比 itertools 拥有更多的可迭代对象的操作方式。
  • returns:一个类型安全的单元、转换器与合成工具集合。

第三方 API

用来访问第三方 API 的库。 参见: List of Python API Wrappers and Libraries

DevOps 工具

用于 DevOps 的软件和库。

  • Ansible:一个非常简单的 IT 自动化平台。
  • SaltStack:基础设施自动化和管理系统。
  • OpenStack:用于构建私有和公有云的开源软件。
  • Docker Compose:快速,分离的开发环境,使用 Docker。
  • Fabric:一个简单的,Python 风格的工具,用来进行远程执行和部署。
  • cuisine:为 Fabric 提供一系列高级函数。
  • Fabtools:一个用来编写超赞的 Fabric 文件的工具。
  • gitapi:Git 的纯 Python API。
  • hgapi:Mercurial 的纯 Python API。
  • honchoForeman 的 Python 克隆版,用来管理基于 Procfile 的应用。
  • pexpect:在一个伪终端中控制交互程序,就像 GNU expect 一样。
  • psutil:一个跨平台进程和系统工具模块。
  • supervisor:UNIX 的进程控制系统。
  • cloudinit:一个多分发包,用于处理云实例的早期初始化。
  • pyinfra:一个通用的 CLI 工具包和 python 库,用于自动化的基础设施。
  • honchoForeman 的 Python 克隆版,用于管理基于 Procfile 的应用。
  • BorgBackup:具有压缩和加密功能的重复数据删除存档器。
  • docker-compose: 使用 Docker 的快速独立的开发环境。

任务调度

任务调度库。

  • APScheduler:轻巧但强大的进程内任务调度,使你可以调度函数。
  • django-schedule:一个 Django 排程应用。
  • doit:一个任务执行和构建工具。
  • gunnery:分布式系统使用的多用途任务执行工具 ,具有 web 交互界面。
  • Joblib:一组为 Python 提供轻量级作业流水线的工具。
  • Plan:如有神助地编写 crontab 文件。
  • schedule:人性化的 Python 任务调度库。
  • Spiff:使用纯 Python 实现的强大的工作流引擎。
  • TaskFlow:一个可以让你方便执行任务的 Python 库,一致并且可靠。
  • Airflow :是一个工作流分配管理系统,通过有向非循环图的方式管理任务流程,设置任务依赖关系和时间调度。
  • Prefect:一个现代的工作流程编排框架,使构建、计划和监视健壮的数据管道变得容易。

外来函数接口

使用外来函数接口的库。

  • cffi:用来调用 C 代码的外来函数接口。
  • ctypes:(Python 标准库) 用来调用 C 代码的外来函数接口。
  • PyCUDA:Nvidia CUDA API 的封装。
  • SWIG:简化的封装和接口生成器。

重构

Python 重构相关库和工具。

高性能

让 Python 更快的库。

  • Cython:优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。
  • CLPython:用 Common Lisp 编写的 Python 编程语言的实现。
  • Grumpy:编译器比解释器更强大的 cpython2.7 替代品(alpha)。
  • IronPython:用 C# 编写的 Python 编程语言的实现。
  • Jython:为 JVM 用 Java 编写的 Python 编程语言的实现。
  • MicroPython:精简高效的 Python 编程语言实现。
  • Pyjion:基于 CoreCLR 的 Python JIT。
  • Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由 Cython 和 NumPy 的开发者开发。
  • PeachPy:嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows,Linux,OS X,Native Client 或者 Go 。
  • PyPy:使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。
  • Pyston:使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。
  • Stackless Python:一个强化版的 Python。

微软的 Windows 平台

在 Windows 平台上进行 Python 编程。

  • Python(x,y):面向科学应用的 Python 发行版,基于 Qt 和 Spyder。
  • pythonlibs:非官方的 Windows 平台 Python 扩展二进制包。
  • PythonNet:Python 与 .NET 公共语言运行库 (CLR)的集成。
  • PyWin32:针对 Windows 的 Python 扩展。
  • WinPython:Windows 7/8 系统下便携式开发环境。

网络可视化和 SDN

用来进行网络可视化和 SDN(软件定义网络)的工具和库。

  • Mininet:一款流行的网络模拟器以及用 Python 编写的 API。
  • POX:一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。
  • Pyretic:火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。
  • SDX Platform:基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。
  • NRU:一个基于组件的软件定义网络框架。
  • napalm:可跨供应商 API 来操纵网络设备。

硬件

用来对硬件进行编程的库。

  • ino:操作 Arduino 的命令行工具。
  • Pyro:Python 机器人编程库。
  • PyUserInput:跨平台的,控制鼠标和键盘的模块。
  • scapy:一个非常棒的操作数据包的库。
  • wifi:一个 Python 库和命令行工具用来在 Linux 平台上操作 WiFi。
  • Pingo:Pingo 为类似 Raspberry Pi,pcDuino, Intel Galileo 等设备提供统一的 API 用以编程。
  • keyboard:在 Windows 和 Linux 上挂钩并模拟全局键盘事件。
  • mouse:在 Windows 和 Linux 上挂钩并模拟全局鼠标事件。

兼容性

帮助从 Python 2 向 Python 3 迁移的库。

  • Python-Future:这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。
  • Six:Python 2 和 3 的兼容性工具。
  • modernize:使 Python 代码更加现代化以便最终迁移到 Python 3。

算法和设计模式

数据结构、算法和设计模式的 Python 实现。也可以参考 awesome-algorithms 。

  • 算法
  • 设计模式
    • PyPattyrn:一个简单而有效的库,用于实现常见的设计模式。
    • python-patterns:一个 Python 设计模式集合。
    • transitions:轻量级的,面向对象的有限状态机实现。

内置类的增强版实现

一些 Python 内置类的增强版实现库。

  • attrs:一个在类定义时可替换 __init____eq____repr__等方法的样板。
  • bidict:高效的 Pythonic 的双向映射数据结构和相关功能。
  • Box:具有高级点符号访问权限的 Python 字典。
  • dataclasses:(Python 标准库) 数据类。
  • DottedDict:提供一种使用点路径符号访问列表和字典的方法的库。

机器人

机器人相关库。

  • PythonRobotics:各种具有可视化效果的机器人算法的汇总。
  • rospy:ROS (Robot Operating System) 库。

聊天工具

聊天机器人开发相关的库。

  • errbot:实现 ChatOps 的最简单最受欢迎的聊天机器人。

编辑器插件和 IDE

  • Emacs
    • elpy:Emacs Python 开发环境。
  • Sublime Text
    • anaconda:Anaconda 可将功能齐全的 Python 开发 IDE 转换为 Sublime Text 3。
    • SublimeJEDI:一个很棒的自动补全库 Jedi 的Sublime Text 插件。
  • Vim
    • jedi-vim:用于 Python 的 Jedi 自动补全库的 Vim 绑定。
    • python-mode:一个将 Vim 转换为 Python IDE 的多合一插件。
    • YouCompleteMe:包含 Jedi 补全的 Python 引擎。
  • Visual Studio
    • PTVS:Visual Studio Python 工具。
  • Visual Studio Code
    • Python:对 Python 有丰富支持的官方 VSCode 扩展。
  • IDE
    • PyCharm:JetBrains 提供的商业 Python IDE,也有免费的社区版。
    • spyder: 开源 Python IDE。

企业级应用集成

企业级环境中用于集成的平台与工具。

  • Zato:ESB, SOA, REST, APIs 以及云的 Python 整合。

GraphQL

GraphQL 相关库。

  • graphene:Python GraphQL 框架。
  • tartiflette-aiohttp:Tartiflette 的基于 aiohttp 的装饰器,用于通过 HTTP 公开 GraphQL API。
  • tartiflette-asgi:Tartiflette GraphQL 引擎的 ASGI 支持。
  • tartiflette:支持 Python 3.6+ 和 asyncio 的 SDL 优先的 GraphQL 引擎实现。

股票金融

  • QUANTAXIS:支持任务调度,分布式部署的股票/期货/期权/港股/虚拟货币的数据/回测/模拟/交易/可视化/多账户纯本地量化解决方案
  • abu: 基于python的开源量化交易,量化投资架构
  • Hikyuu Quant:基于C++/Python的开源量化交易研究框架,用于策略分析及回测(仅受限于数据,如有数据也可用于期货等)
  • vnpy:基于Python的开源量化交易系统开发框架,整合了多种交易接口,并针对具体策略算法和功能开发提供了简洁易用的API,用于快速构建交易员所需的量化交易应用

杂项

不属于上面任何一个类别,但是非常有用的库。

  • blinker:快速的 Python 运行时信号/事件分配系统。
  • boltons:一组纯 Python 实用工具。
  • itsdangerous:将受信任的数据传递到不受信任的环境的帮助工具。
  • magenta:使用人工智能生成音乐与艺术的工具。
  • pluginbase:一个简单但灵活的 Python 插件系统。
  • tryton:一个通用业务框架。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值