分类目录归档:github

Mininet-软件定义网络快速原型仿真器

什么是Mininet?

Mininet在一台机器上模拟由主机、链路和交换机组成的完整网络。要创建两台主机、一台交换机的示例网络,只需运行:

sudo mn

Mininet对于交互式开发、测试和演示非常有用,尤其是那些使用OpenFlow和SDN的开发、测试和演示。在Mininet中建立原型的基于OpenFlow的网络控制器通常可以转移到硬件上,只需最少的更改即可实现全线速执行

它怎麽工作?

Mininet使用基于进程的虚拟化和网络命名空间创建虚拟网络-这些特性在最近的Linux内核中都可用。在Mininet中,主机被模拟为bash进程在网络命名空间中运行,因此任何通常在Linux服务器(如Web服务器或客户端程序)上运行的代码应该在Mininet“Host”中运行良好。Mininet“主机”将拥有自己的专用网络接口,并且只能看到自己的进程。Mininet中的交换机是基于软件的交换机,如Open vSwitch或OpenFlow参考交换机。链路是虚拟以太网对,它们驻留在Linux内核中,并将我们的仿真交换机连接到仿真主机(进程)

功能

Mininet包括:

  • 命令行启动器(mn)实例化网络
  • 用于创建各种大小和拓扑的网络的便捷Python API
  • 示例(在examples/目录)来帮助您入门
  • 通过Python提供完整的API文档help()文档字符串,以及使用生成PDF/HTML文档的能力make doc
  • 参数化拓扑(Topo子类)使用Mininet对象。例如,可以使用以下命令创建树网络:

    mn --topo tree,depth=2,fanout=3

  • 命令行界面(CLI类),它提供有用的诊断命令(如iperfping),以及向节点运行命令的能力。例如,

    mininet> h11 ifconfig -a

    通知主机H11运行该命令ifconfig -a

  • 清除垃圾(/tmp中的接口、进程、文件等)的“清理”命令它可能会被Mininet或Linux留下。如果事情不起作用,试试这个!

    mn -c

Python 3支持

  • Mininet 2.3.0支持Python3和Python2!
  • 您可以并排安装Mininet的Python 3和Python 2版本,但最新安装将确定默认情况下使用哪个Python版本mn
  • 你可以跑mn直接使用Python 2或Python 3,只要安装了适当版本的Mininet,例如
    $ sudo python2 `which mn`
    
  • 有关Python 3和Python 2支持的详细信息,请参阅上的发行说明http://docs.mininet.org

其他增强功能和信息

  • 支持Ubuntu 20.04 LTS(以及18.04和16.04)
  • 通过GitHub操作实现更可靠的测试和CI
  • 有关此版本和以前版本的更多信息,请参阅上的版本说明http://docs.mininet.org

安装

看见INSTALL有关安装说明和详细信息,请参阅

文档

除了API文档(make doc),上提供了许多有用的信息,包括Mininet演练和Python API简介Mininet Web Site还有一个维基,鼓励您阅读并参与其中,特别是常见问题解答(FAQ),网址为http://faq.mininet.org

支持

Mininet是由社区支持的。我们鼓励您加入Mininet邮件列表,mininet-discuss在:

https://mailman.stanford.edu/mailman/listinfo/mininet-discuss

加入我们吧

再次感谢所有Mininet的贡献者和用户!

Mininet是一个开源项目,目前托管在https://github.com/mininet我们鼓励您下载、检查、修改代码,并提交错误报告、错误修复、功能请求、新功能和其他问题以及拉取请求。感谢为Mininet项目贡献代码的每个人(有关更多信息,请参阅贡献者!)正是因为每个人的辛勤工作,Mininet才能不断成长和完善

享受Mininet吧

玩得开心!我们期待着看到您将如何使用Mininet来改变网络世界

鲍勃·兰茨,代表Mininet的贡献者

Isort-用于对import进行排序的Python实用程序/库

isort 是一个Python的实用程序/库,它会按字母顺序对导入(import)的库进行排序,并自动分组。它提供多种实用方式,包括命令行、Python库和VSCode、Pycharm插件快速分拣你所有的import。

它基于Python 3.6+实现,但也支持格式化Python 2代码

在isort之前:

from my_lib import Object
import os
from my_lib import Object3
from my_lib import Object2
import sys
from third_party import lib15, lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9, lib10, lib11, lib12, lib13, lib14
import sys
from __future__ import absolute_import
from third_party import lib3
print("Hey")
print("yo")

排序后:

from __future__ import absolute_import import os
import sys from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
                        lib9, lib10, lib11, lib12, lib13, lib14, lib15)

from my_lib import Object, Object2, Object3 
print("Hey")
print("yo")

安装isort

安装isort非常简单,只需:

pip install isort

安装isort,并提供Requirements.txt支持:

pip install isort[requirements_deprecated_finder]

安装支持管道文件的isort:

pip install isort[pipfile_deprecated_finder]

安装支持两种格式的isort:

pip install isort[requirements_deprecated_finder,pipfile_deprecated_finder]

使用isort

从命令行

要在特定文件上运行,请执行以下操作:

isort mypythonfile.py mypythonfile2.py

要递归应用,请执行以下操作:

isort .

如果globstar已启用,isort .相当于:

isort **/*.py

要查看建议的更改而不应用它们,请执行以下操作:

isort mypythonfile.py --diff

最后,要对项目自动运行isort,仅在未引入语法错误的情况下应用更改:

isort --atomic .

(注意:这在默认情况下是禁用的,因为它阻止isort针对使用不同版本的Python编写的代码运行。)

从Python内部

import isort
isort.file(“pythonfile.py”)

或者:

import isort
sorted_code = isort.code(“import b\nimport a\n)

为您首选的文本编辑器安装isort

已经编写了几个插件,可以在各种文本编辑器中使用isort。您可以找到它们的完整列表on the isort
wiki
此外,我将热情地接受包括其他文本编辑器插件的Pull请求,并在收到通知时为它们添加文档

多行输出模式

您将注意到上面的“MULTI_LINE_OUTPUT”设置。此设置定义当从导入扩展到超过line_length限制并具有12 possible settings

压痕

要更改常量缩进的显示方式-只需使用以下可接受的格式更改缩进属性:

  • 您想要的空间数。例如:4将导致标准的4空格缩进
  • 选项卡
  • 带引号的逐字字符串

例如:

"    "

等于4

对于使用圆括号的导入样式,可以控制是否在上次导入后使用include_trailing_comma选项(默认为False)

智能平衡多行导入

从isort3.1.0开始,添加了对平衡多行导入的支持。启用此功能后,isort会将导入长度动态更改为生成最平衡格网的长度,同时保持在定义的最大导入长度以下

示例:

from __future__ import (absolute_import, division,
                        print_function, unicode_literals)

将会产生,而不是:

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

要启用此设置,请执行以下操作balanced_wrappingTrue在您的配置中,或将-e选项添加到命令行实用程序中

自定义节和排序

isort提供了配置选项来更改导入在各个部分中的组织、排序或分组方式的几乎每一个方面

Click here有关所有这些选项的概述,请参阅

跳过导入处理(配置之外)

要使isort忽略单个导入,只需在包含文本的导入行末尾添加注释isort:skip

import module  # isort:skip

或者:

from xyz import (abc,  # isort:skip
                 yo,
                 hey)

要使isort跳过整个文件,只需添加isort:skip_file添加到模块的文档字符串:

""" my_module.py
    Best module ever

   isort:skip_file
"""

import b
import a

从多个文件添加或删除导入

可以运行isort或将其配置为自动添加/删除导入

See a complete guide here.

使用isort验证代码

这个--check-only选项

也可以使用isort来验证代码的格式是否正确,方法是使用-c任何包含错误排序和/或格式化导入的文件都将输出到stderr

isort **/*.py -c -v

SUCCESS: /home/timothy/Projects/Open_Source/isort/isort_kate_plugin.py Everything Looks Good!
ERROR: /home/timothy/Projects/Open_Source/isort/isort/isort.py Imports are incorrectly sorted.

可以使用它的一个很好的地方是使用预先提交的git钩子,比如@acdha提供的这个钩子:

https://gist.github.com/acdha/8717683

这有助于在整个项目中确保一定级别的代码质量

Git钩子

isort提供了一个钩子函数,该函数可以集成到Git预提交脚本中,以便在提交之前检查Python代码

More info here.

Setuptools集成

安装后,isort将启用setuptools用于检查项目声明的Python文件的命令

More info here.

把消息传出去

将此徽章放在存储库的顶部,让其他人知道您的项目使用了isort

对于Readme.md:

[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)

或readme.rst:

.. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
    :target: https://pycqa.github.io/isort/

安全联系信息

若要报告安全漏洞,请使用Tidelift security
contact
Tidelift将协调修复和披露

为什么是伊索尔?

isort简单地表示导入排序。它最初名为“sortImports”,但是我厌倦了键入额外的字符,并意识到CamelCase并不是巨蟒

我之所以编写isort,是因为在我曾经工作过的一个组织中,经理有一天来了,他决定所有代码都必须按字母顺序对导入进行排序。代码库很大–他的意思是让我们手工完成。然而,作为一名程序员-我太懒了,不会花8个小时盲目地执行一个函数,但也不会太懒,不会花16个小时让它自动化。我获得了开放源码sortImports的许可,我们在这里:)


Get professionally supported isort with the Tidelift
Subscription

对isort的专业支持是作为Tidelift
Subscription
Tidelift为软件开发团队提供了购买和维护软件的单一来源,并由最了解该技术的专家提供专业级别保证,同时与现有工具无缝集成


谢谢,我希望你觉得isort有用!

~蒂莫西·克罗斯利

WeiboSpider-新浪微博爬虫,用Python爬取新浪微博数据

本程序可以连续爬取一个多个新浪微博用户(如胡歌迪丽热巴郭碧婷)的数据,并将结果信息写入文件数据库那就是。写入信息几乎包括用户微博的所有数据,包括用户信息微博信息两大类.因为内容太多,这里不再赘述,详细内容见获取到的字段那就是。如果只需要用户信息,可以通过设置实现只爬取微博用户信息的功能.本程序需设置Cookie来获取微博访问权限,后面会讲解如何获取cookie那就是。如果不想设置Cookie,可以使用免cookie版、二者功能类似.

爬取结果可写入文件和数据库,具体的写入文件类型如下:

  • TXT文件(默认)
  • csv文件(默认)
  • JSON文件(可选)
  • mysql数据库(可选)
  • mongodb数据库(可选)
  • SQLite数据库(可选)

同时支持下载微博中的图片和视频,具体的可下载文件如下:

  • 原创微博中的原始图片(可选)
  • 转发微博中的原始图片(可选)
  • 原创微博中的视频(可选)
  • 转发微博中的视频(可选)
  • 原创微博现场照片中的视频(免cookie版(特有)
  • 转发微博现场照片中的视频(免cookie版(特有)

内容列表

[TOC]

获取到的字段

本部分为爬取到的字段信息说明,为了与免cookie版区分,下面将两者爬取到的信息都列出来.如果是免Cookie版所特有的信息,会有免Cookie标注,没有标注的为二者共有的信息。

用户信息

  • 用户id:微博用户id,如“1669879400”,其实这个字段本来就是已知字段
  • 昵称:用户昵称,如“亲爱的-迪丽热巴”
  • 性别:微博用户性别
  • 生日:用户出生日期
  • 所在地:用户所在地
  • 学习经历:用户上学时学校的名字和时间
  • 工作经历:用户所属公司名字和时间
  • 阳光信用(免Cookie版):用户的阳光信用
  • 微博注册时间(免Cookie版):用户微博注册日期
  • (微博数:用户的全部微博数(转发微博+原创微博)
  • 关注数:用户关注的微博数量
  • 粉丝数:用户的粉丝数
  • 简介:用户简介
  • 主页地址(免Cookie版):微博移动版主页URL
  • 头像URL(免Cookie版):用户头像URL
  • 高清头像URL(免Cookie版):用户高清头像URL
  • 微博等级(免Cookie版):用户微博等级
  • 会员等级(免Cookie版):微博会员用户等级,普通用户该等级为%0
  • 是否认证(免Cookie版):用户是否认证,为布尔类型
  • 认证类型(免Cookie版):用户认证类型,如个人认证、企业认证、政府认证等
  • 认证信息:为认证用户特有,用户信息栏显示的认证信息

微博信息

  • 微博id:微博唯一标志
  • 微博内容:微博正文
  • 头条文章URL:微博中头条文章的URL,若微博中不存在头条文章,则值为‘’
  • 原始图片URL:原创微博图片和转发微博转发理由中图片的URL,若某条微博存在多张图片,每个URL以英文逗号分隔,若没有图片则值为“无”
  • 视频URL:微博中的视频URL,若微博中没有视频,则值为“无”
  • 微博发布位置:位置微博中的发布位置
  • 微博发布时间:微博发布时的时间,精确到分
  • 点赞数:微博被赞的数量
  • 转发数:微博被转发的数量
  • 评论数:微博被评论的数量
  • 微博发布工具:微博的发布工具,如iphone客户端、华为Mate 20专业版等
  • 结果文件:保存在当前目录微博文件夹下以用户昵称为名的文件夹里,名字为“user_id.csv”和“user_id.txt”的形式
  • 微博图片:原创微博中的图片和转发微博转发理由中的图片,保存在以用户昵称为名的文件夹下的img文件夹里
  • 微博视频:原创微博中的视频,保存在以用户昵称为名的文件夹下的视频文件夹里
  • 微博BID(免Cookie版):为免cookie版所特有,与本程序中的微博id是同一个值
  • 话题(免Cookie版):微博话题,即两个#中的内容,若存在多个话题,每个URL以英文逗号分隔,若没有则值为‘’
  • @用户(免Cookie版):微博@的用户,若存在多个@用户,每个url以英文逗号分隔,若没有则值为‘’
  • 原始微博(免Cookie版):为转发微博所特有,是转发微博中那条被转发的微博,存储为字典形式,包含了上述微博信息中的所有内容,如微博id、微博内容等等

示例

如果想要知道程序的具体运行结果,可以查看示例文档,该文档介绍了爬取迪丽热巴微博的例子,并附有部分结果文件截图.

运行环境

  • 开发语言:Python2/Python3
  • 系统:Windows/LINUX/MacOS

使用说明

0。版本

本程序有两个版本,你现在看到的是python3版,另一个是python2版,python2版位于python2分支那就是。目前主力开发python3版,包括新功能开发和bug修复;python2版仅支持bug修复。推荐python3用户使用当前版本,推荐python2用户使用python2版、本使用说明是python3版的使用说明.

1.安装程序

本程序提供两种安装方式,一种是源码安装,另一种是PiP安装、二者功能完全相同.如果你需要修改源码,建议使用第一种方式,否则选哪种安装方式都可以.

源码安装

$ git clone https://github.com/dataabc/weiboSpider.git
$ cd weiboSpider
$ pip install -r requirements.txt

PiP安装

$ python3 -m pip install weibo-spider

2.程序设置

要了解程序设置,请查看程序设置文档那就是。

3.运行程序

源码安装的用户可以在WeiboSpider目录运行如下命令PiP安装的用户可以在任意有写权限的目录运行如下命令

$ python3 -m weibo_spider

第一次执行,会自动在当前目录创建配置.json配置文件,配置好后执行同样的命令就可以获取微博了。

如果你已经有config.json文件了,也可以通过CONFIG_PATH参数配置config.json路径,运行程序,命令行如下:

$ python3 -m weibo_spider --config_path="config.json"

如果你想指定文件(csv、txt、json、图片、视频)保存路径,可以通过输出目录参数设定.假如你想把文件保存到/主页/微博/目录,可以运行如下命令:

$ python3 -m weibo_spider --output_dir="/home/weibo/"

如果你想通过命令行输入user_id,可以使用参数u,可以输入一个或多个user_id,每个user_id以英文逗号分开,如果这些user_id中有重复的user_id,程序会自动去重。命令行如下:

$ python3 -m weibo_spider --u="1669879400,1223178222"

程序会获取User_id分别为1669879400和1223178222的微博用户的微博,后面会讲如何获取user_id那就是。该方式的所有User_id使用config.json中的Self_Date和End_Date设置,通过修改它们的值可以控制爬取的时间范围。若config.json中的User_id_List是文件路径,每个命令行中的User_id都会自动保存到该文件内,且自动更新Self_Date;若不是路径,User_id会保存在当前目录的User_id_List.txt内,且自动更新Self_Date,若当前目录下不存在User_id_List.txt,程序会自动创建它。

(个性化定制程序(可选)

本部分为可选部分,如果不需要个性化定制程序或添加新功能,可以忽略此部分.

本程序主体代码位于weibo_Spider.py文件,程序主体是一个蜘蛛类,上述所有功能都是通过在Main函数调用蜘蛛类实现的,默认的调用代码如下:

        config = get_config()
        wb = Spider(config)
        wb.start()  # 爬取微博信息

用户可以按照自己的需求调用或修改蜘蛛类.通过执行本程序,我们可以得到很多信息.

点击查看详情
  • wb.user[‘昵称’]:用户昵称;
  • wb.user[‘性别’]:用户性别;
  • wb.user[‘Location’]:用户所在地;
  • wb.user[‘生日’]:用户出生日期;
  • wb.user[‘Description’]:用户简介;
  • wb.user[‘VERIFIED_REASON’]:用户认证;
  • wb.user[‘Talent’]:用户标签;
  • wb.user[‘教育’]:用户学习经历;
  • wb.user[‘Work’]:用户工作经历;
  • wb.user[‘webo_num’]:微博数;
  • wb.user[‘Follow’]:关注数;
  • wb.user[‘Followers’]:粉丝数;

wb.weibo:除不包含上述信息外,wb.weibo包含爬取到的所有微博信息,如微博ID微博正文原始图片URL发布位置发布时间发布工具点赞数转发数评论数等.如果爬的是全部微博(原创+转发),除上述信息之外,还包含被转发微博原始图片URL是否为原创微博等.Wb.weibo是一个列表,包含了爬取的所有微博信息.wb.weibo[0]为爬取的第一条微博,wb.weibo[1]为爬取的第二条微博,以此类推.当过滤=1时,wb.weibo[0]为爬取的第一条原创微博,以此类推.wb.weibo[0][‘id’]为第一条微博的id,wb.weibo[0][‘Content’]为第一条微博的正文,wb.weibo[0][‘Publish_Time’]为第一条微博的发布时间,还有其它很多信息不在赘述,大家可以点击下面的“详情”查看具体用法。

详情

若目标微博用户存在微博,则:

  • ID:存储微博id。如wb.weibo[0][‘id’]为最新一条微博的id;
  • 内容:存储微博正文。内容wb.weibo[0][‘如’]为最新一条微博的正文;
  • 文章URL:存储微博中头条文章的URL。文章wb.weibo[0][‘如_url’]为最新一条微博的头条文章url,若微博中不存在头条文章,则值为‘’;
  • 原始图片:存储原创微博的原始图片URL和转发微博转发理由中的图片URL。如wb.weibo[0][‘Original_Pictures’]为最新一条微博的原始图片url,若该条微博有多张图片,则存储多个url,以英文逗号分割;若该微博没有图片,则值为“无”;
  • 转发图片:存储被转发微博中的原始图片URL。当最新微博为原创微博或者为没有图片的转发微博时,则值为“无”,否则为被转发微博的图片URL。若有多张图片,则存储多个URL,以英文逗号分割;
  • PUBLISH_PLACE:存储微博的发布位置。如wb.weibo[0][‘PUBLISH_PLACE’]为最新一条微博的发布位置,如果该条微博没有位置信息,则值为“无”;
  • PUBLISH_TIME:存储微博的发布时间。如wb.weibo[0][‘PUBLISH_TIME’]为最新一条微博的发布时间;
  • up_num:存储微博获得的点赞数。如wb.weibo[0][‘up_num’]为最新一条微博获得的点赞数;
  • 转发号:存储微博获得的转发数。转发wb.weibo[0][‘如_num’]为最新一条微博获得的转发数;
  • COMMENT_NUM:存储微博获得的评论数。评论wb.weibo[0][‘如_num’]为最新一条微博获得的评论数;
  • 发布工具:存储微博的发布工具。如wb.weibo[0][‘Publish_Tool’]为最新一条微博的发布工具。

(定期自动爬取微博(可选)

要想让程序每个一段时间自动爬取,且爬取的内容为新增加的内容(不包括已经获取的微博),请查看定期自动爬取微博那就是。

如何获取Cookie

要了解获取Cookie方法,请查看cookie文档那就是。

用户ID(如何获取_id)

要了解获取用户id方法,请查看user_id文档、该文档介绍了如何获取一个及多个微博用户用户id的方法。

常见问题

如果运行程序的过程中出现错误,可以查看常见问题页面,里面包含了最常见的问题及解决方法.如果出现的错误不在常见问题里,您可以通过发issue寻求帮助,我们会很乐意为您解答.

学术研究

本项目通过获取微博数据,为写论文、做研究等非商业项目提供所需数据.学术研究文档是一些在论文或研究等方面使用过本程序的项目,这些项目展示已征得所有者同意.在一些涉及隐私的描述上,已与所有者做了沟通,描述中只介绍所有者允许展示的部分.如果部分信息所有者之前同意展示并且已经写在了文档中,现在又不想展示了,可以通过邮件(chillychen1991@gmail.com)或Issue的方式告诉我,我会删除相关信息。同时,也欢迎使用本项目写论文或做其它学术研究的朋友,将自己的研究成果展示在学术研究文档里,这完全是自愿的.

相关项目

  • weibo-crawler-功能和本项目完全一样,可以不添加Cookie,获取的微博属性更多;
  • weibo-search–可以连续获取一个或多个微博关键词搜索结果,并将结果写入文件(可选)、数据库(可选)等.所谓微博关键词搜索即:搜索正文中包含指定关键词的微博、可以指定搜索的时间范围.对于非常热门的关键词,一天的时间范围,可以获得1,000万以上的搜索结果,N天的时间范围就可以获得1000万X N搜索结果。对于大多数关键词,一天产生的相应微博数量应该在1,000万条以下,因此可以说该程序可以获得大部分关键词的全部或近似全部的搜索结果。而且该程序可以获得搜索结果的所有信息,本程序获得的微博信息该程序都能获得.

贡献

欢迎为本项目贡献力量.贡献可以是提交代码,可以是通过Issue提建议(如新功能、改进方案等),也可以是通过Issue告知我们项目存在哪些Bug、缺点等,具体贡献方式见为本项目做贡献那就是。

贡献者

感谢所有为本项目贡献力量的朋友,贡献者详情见贡献者页面.

注意事项

  1. 不能为爬虫微博的用户id用户id。因为要爬微博信息,必须先登录到某个微博账号,此账号我们姑且称为爬虫微博.爬虫微博访问自己的页面和访问其他用户的页面,得到的网页格式不同,所以无法爬取自己的微博信息;如果想要爬取爬虫微博内容,可以参考获取自身微博信息
  2. 曲奇有期限限制,大约三个月。若提示Cookie错误或已过期,需要重新更新Cookie。

Nameko-用于构建微服务的Python框架

Python的微服务框架,让服务开发人员专注于应用程序逻辑并鼓励可测试性

Nameko服务只是一个类:

# helloworld.py

from nameko.rpc import rpc

class GreetingService:
    name = "greeting_service"

    @rpc
    def hello(self, name):
        return "Hello, {}!".format(name)

您可以在shell中运行它:

$ nameko run helloworld
starting services: greeting_service
...

从另一个人那里玩弄它:

$ nameko shell
>>> n.rpc.greeting_service.hello(name="ナメコ")
'Hello, ナメコ!'

功能

  • AMQP RPC和事件(发布-订阅)
  • HTTP GET、POST和WebSockets
  • CLI可实现轻松快速的开发
  • 用于单元和集成测试的实用程序

快速入门

支持

如需帮助、意见或问题,请访问<https://discourse.nameko.io/>

对于企业而言

作为Tidelift订阅的一部分提供

nameko和其他数千个包的维护者正在与Tidelift合作,为您用于构建应用程序的开源依赖项提供商业支持和维护。节省时间、降低风险并提高代码的健全性,同时付钱给您使用的确切依赖项的维护人员。Learn more.

安全联系信息

若要报告安全漏洞,请使用Tidelift security contactTidelift将协调修复和披露

贡献力量

  • 派生存储库
  • 提出问题或提出功能请求

许可证

Apache 2.0。有关详细信息,请参阅许可证

Sqlalchemy-Python数据库工具包

Python SQL工具包和对象关系映射器

引言

SQLAlChemy是Python SQL工具包和对象关系映射器,它为应用程序开发人员提供了SQL的全部功能和灵活性。SQLAlChemy提供了一整套众所周知的企业级持久化模式,专为高效和高性能的数据库访问而设计,并改编成简单的Python域语言

SQLAlChemy的主要功能包括:

  • 工业实力ORM,从身份图、工作单元和数据映射器模式上的核心构建。这些模式允许使用声明性配置系统透明地持久化对象。域模型可以自然地构建和操作,并且更改会自动与当前事务同步
  • 面向关系的查询系统,根据对象模型显式公开SQL的全部功能,包括联接、子查询、关联和几乎所有其他功能。使用ORM编写查询使用的关系组合技术与编写SQL时使用的技术相同。虽然您可以随时使用文字SQL,但实际上从来不需要它
  • 一个全面而灵活的系统,可以立即加载相关集合和对象。集合缓存在会话中,并且可以在单个访问时使用联接一次加载,也可以通过跨整个结果集的每个集合查询一次加载
  • 核心SQL构建系统和DBAPI交互层。SQLAlChemy Core独立于ORM,本身就是一个完整的数据库抽象层,包括可扩展的基于Python的SQL表达式语言、模式元数据、连接池、类型强制和自定义类型
  • 所有主键和外键约束都假定是复合的和自然的。当然,代理整数主键仍然是规范,但是SQLAlChemy从不假定或硬编码此模型
  • 数据库自省和生成。数据库模式可以在一个步骤中“反映”到表示数据库元数据的Python结构中;然后,这些相同的结构可以立即生成CREATE语句-所有这些语句都在Core中,独立于ORM

SQLAlChemy的理念:

  • SQL数据库的行为越来越不像对象集合,大小和性能越重要;对象集合的行为越不像表和行,抽象就越重要。SQLAlChemy旨在同时满足这两个原则
  • ORM不需要隐藏“R”。关系数据库提供了丰富的、基于集合的功能,这些功能应该完全公开。SQLAlChemy的ORM提供了一组开放式模式,允许开发人员在域模型和关系模式之间构建自定义中介层,将所谓的“对象关系阻抗”问题变成遥远的记忆
  • 在所有情况下,开发人员都要做出关于对象模型和关系模式的设计、结构和命名约定的所有决策。SQLAlChemy仅提供自动执行这些决策的方法
  • 使用SQLAlChemy,不存在“ORM生成错误的查询”这样的事情-您保留对查询结构的完全控制,包括如何组织联接、如何使用子查询和关联、请求哪些列。SQLAlChemy所做的一切最终都是开发人员发起的决策的结果
  • 如果问题不需要ORM,请不要使用ORM。SQLAlChemy由一个核心和单独的ORM组件组成。Core提供了完整的SQL表达式语言,允许以Pythonic方式构造SQL构造,这些构造直接呈现为目标数据库的SQL字符串,返回本质上是增强型DBAPI游标的结果集
  • 交易应该是常态。使用SQLAlChemy的ORM,在调用Commit()之前,不会将任何内容放到永久存储中。SQLAlChemy鼓励应用程序创建描述一系列操作的开始和结束的一致方法
  • 千万不要在SQL语句中呈现文字值。最大程度地使用了绑定参数,从而允许查询优化器有效地缓存查询计划,并使SQL注入攻击不再成为问题

文档

最新文档位于:

https://www.sqlalchemy.org/docs/

安装/要求

有关安装的完整文档,请访问Installation

获取帮助/开发/错误报告

请参阅SQLAlchemy Community Guide

行为规范

最重要的是,SQLAlChemy非常重视用户和开发人员之间的礼貌、深思熟虑和建设性的交流。请参阅我们当前的行为准则,网址为Code of Conduct

许可证

SQLAlChemy分布在MIT license

Visidata 一种用于发现和整理数据的终端电子表格工具

一种用于浏览和排列表格数据的终端界面

VisiData支持TSV、CSV、SQLite、json、xlsx(Excel)、hdf5和many other formats

平台要求

  • Linux、OS/X或Windows(带WSL)
  • Python 3.6+
  • 某些格式和源需要其他Python模块

安装

要从PyPI安装最新版本,请执行以下操作:

 

pip3 install visidata

安装尖端设备的步骤develop分公司(无明示或默示的保修):

 

pip3 install git+https://github.com/saulpw/visidata.git@develop

看见visidata.org/install有关所有可用平台和包管理器的详细说明,请参阅

用法

 

$ vd <input>
$ <command> | vd

按下Ctrl+Q随时戒烟

还可以使用数百个其他命令和选项;请参阅文档

文档

帮助和支持

如果您有关于VisiData的问题、问题或建议,请create an issue on Github或在#visidata上与我们聊天irc.libera.chat

如果您经常使用VisiData,请support me on Patreon好了!

许可证

中的代码。stable此存储库的分支,包括主vd应用程序、加载器和插件可在GPLv3下使用和重新分发

学分

VisiData由Saul Pwanson构思和开发<vd@saul.pw>

安雅·凯法拉(Anja Kefala)<anja.kefala@gmail.com>维护所有平台的文档和软件包

非常感谢无数其他人contributors,以及那些提供反馈的优秀用户,感谢他们帮助VisiData成为令人敬畏的工具

Manim-社区维护的用于创建数学动画的Python框架

用于解释数学视频的动画引擎


Manim是用于解释数学视频的动画引擎。它用于以编程方式创建精确的动画,如3Blue1Brown

注意:这个存储库是由Manim社区维护的,与Grant Sanderson或3Blue1Brown没有任何关联(尽管我们非常感谢他将他的工作提供给世界)。如果你想了解格兰特是如何制作视频的,请访问他的存储库(3b1b/manim)。此分叉比他的更新更频繁,如果您想将Manim用于您自己的项目,建议使用此分叉

目录:

安装

Manim需要一些依赖项,在使用它之前必须安装这些依赖项。如果您想在本地安装之前先试用,可以这样做in our online Jupyter environment

有关本地安装,请访问Documentation并按照适用于您的操作系统的说明进行操作

安装依赖项后,在终端窗口中运行以下命令:

pip install manim

用法

Manim是一个非常通用的软件包。以下是一个示例Scene您可以构建:

from manim import *


class SquareToCircle(Scene):
    def construct(self):
        circle = Circle()
        square = Square()
        square.flip(RIGHT)
        square.rotate(-3 * TAU / 8)
        circle.set_fill(PINK, opacity=0.5)

        self.play(Create(square))
        self.play(Transform(square, circle))
        self.play(FadeOut(square))

要查看此场景的输出,请将代码保存在一个名为example.py然后,在终端窗口中运行以下命令:

manim -p -ql example.py SquareToCircle

您应该会看到您的原生视频播放器程序弹出,并播放一个简单的场景,在该场景中,一个正方形被转换为一个圆。您可以在下面的内容中找到一些更简单的示例GitHub repository您也可以访问official gallery有关更高级的示例,请参阅

Manim还附带一个%%manimIPython魔术,允许在JupyterLab(以及经典的Jupyter)笔记本中方便地使用它。请参阅

corresponding documentation需要一些指导和帮助try it out online

命令行参数

Manim的一般用法如下:

这个-p上述命令中的标志用于预览,即视频文件渲染完成后将自动打开。这个-qlFLAG用于以较低质量进行更快的渲染

其他一些有用的标志包括:

  • -s跳到末尾,只显示最后一帧
  • -n <number>要跳到前面的n‘场景的第8个动画
  • -f在文件浏览器中显示文件

有关命令行参数的完整列表,请访问documentation

文档

文档正在进行中,地址为ReadTheDocs

码头工人

社区还维护码头形象(manimcommunity/manim),可以找到on DockerHub支持以下标签:

运行坞站映像的说明

快速示例

渲染场景的步骤CircleToSquare在文件中test_scenes.py包含在当前工作目录中,同时保留您的用户和组ID,请使用

docker run --rm -it  --user="$(id -u):$(id -g)" -v "$(pwd)":/manim manimcommunity/manim manim test_scenes.py CircleToSquare -qm

在后台运行图像

除了使用上面描述的“一次性容器”方法,您还可以创建一个命名容器,您也可以根据自己的喜好进行修改。首先,跑步

docker run -it --name my-manim-container -v "$(pwd):/manim" manimcommunity/manim /bin/bash

要在容器中获得交互式shell,例如,可以安装更多依赖项(比如使用以下命令安装texlive包tlmgr)。满意后立即退出容器。然后,在使用它之前,通过运行以下命令启动容器

docker start my-manim-container

然后,要渲染场景CircleToSquare在文件中test_scenes.py,呼叫

docker exec -it --user="$(id -u):$(id -g)" my-manim-container manim test.py CircleToSquare -qm

木星实验室

另一种替代方法是使用docker映像启动运行JupyterLab的本地Web服务器,JupyterLab中安装了Python内核Manim,可以通过%%manim细胞魔法。要使用JupyterLab,请运行

docker run -it -p 8888:8888 manimcommunity/manim jupyter lab --ip=0.0.0.0

然后按照航站楼里的说明操作

重要说明

在执行时manim在Docker容器中,有几个命令行标志(特别是-p(预览文件)和-f(在文件浏览器中显示输出文件))不受支持

帮助处理Manim

如果您需要安装或使用Manim的帮助,请随时联系我们的Discord
Server
Reddit Community如果您要提交错误报告或功能请求,请打开问题

贡献

对Manim的贡献总是受欢迎的。特别是,对测试和文档的需求非常迫切。有关投稿指引,请参阅documentation

该项目中的大多数开发人员使用Poetry对于管理层来说。您需要在您的环境中安装并使用POLITE。您可以了解更多关于poetry以及如何在ITS中使用它documentation

如何引用Manim

我们认识到好的软件对支持研究的重要性,我们注意到,当研究得到有效沟通时,它就会变得更有价值。为了证明曼尼姆的价值,我们要求你在你的作品中引用曼尼姆。目前,引用Manim的最佳方式是引用Manim home page使用此BibTeX条目(该条目用于发布v0.9.0,但很容易修改):

@Manual{Manim:v0.9.0,
  key =          {Manim},
  author =       {{The Manim Community Developers}},
  title =        {{Manim} -- {M}athematical {A}nimation {F}ramework ({V}ersion v0.9.0)},
  note =         {\url{https://www.manim.community}},
  year =         2021,
}

这应该会呈现大致如下所示的引用:

  1. 曼尼姆社区开发人员,Manim – Mathematical Animation Framework (Version v0.9.0)2021年

行为规范

我们完整的行为准则,以及我们如何执行它,都可以继续阅读。our website

许可证

该软件在麻省理工学院的许可下是双重许可的,版权归3Blu1Brown LLC所有(见许可),版权归Manim社区开发者所有(见LICENSE.Community)

Gdb-dashboard-Python中GDB的模块化可视化界面

GDB仪表板

GDB仪表板是独立的.gdbinit属性编写的文件。Python API这使得模块化界面能够显示关于正在调试的程序的相关信息。它的主要目标是减少检查当前程序状态所需的GDB命令的数量,从而允许开发人员主要关注控制流

快速入门

只要放好位置就行了.gdbinit在您的主目录中,例如使用:

wget -P ~ https://git.io/.gdbinit

可选安装Pygments要启用语法突出显示,请执行以下操作:

pip install pygments

然后照常调试,每次下级程序停止时仪表板都会自动出现

请记住,尚未重新定义任何gdb命令,相反,所有功能都可以通过Maindashboard命令(请参见help dashboard)

前往wiki学习如何执行最重要的任务

Jina-面向任何类别数据的云原生神经搜索框架

云-本地神经搜索[?]适用于以下方面的框架任何数据类型

Jina 允许您在短短几分钟内构建以深度学习为动力的搜索即服务

🌌所有数据类型-大规模索引和查询任何类型的非结构化数据:视频、图像、长/短文本、音乐、源代码、PDF等

🌩️FAST和本机云-从第一天开始的分布式架构,可扩展且设计为本地云:享受集装箱化、流式处理、并行、分片、异步调度、HTTP/GRPC/WebSocket协议

⏱️节省时间这个神经搜索系统的设计模式,从零到生产准备就绪的系统只需几分钟

🍱拥有您的堆栈-保持解决方案的端到端堆栈所有权,避免使用零散的、多供应商的通用旧式工具带来的集成陷阱

运行快速演示

安装

  • 通过PyPI:pip install -U "jina[standard]"
  • 通过Docker:docker run jinaai/jina:latest
更多安装选项
x86/64、arm64、v6、v7 Linux/MacOS和Python 3.7/3.8/3.9 Docker用户
最低要求
(不支持HTTP、WebSocket、Docker)
pip install jina docker run jinaai/jina:latest
Daemon pip install "jina[daemon]" docker run --network=host jinaai/jina:latest-daemon
使用附加服务 pip install "jina[devel]" docker run jinaai/jina:latest-devel

版本标识符are explained here吉娜可以继续奔跑Windows Subsystem for Linux我们欢迎社会各界帮助我们native Windows support

开始使用

文档、执行者和流是JINA中的三个基本概念

1个️⃣复制-粘贴下面的最小示例并运行它:

💡预赛:character embeddingpoolingEuclidean distance

import numpy as np
from jina import Document, DocumentArray, Executor, Flow, requests

class CharEmbed(Executor):  # a simple character embedding with mean-pooling
    offset = 32  # letter `a`
    dim = 127 - offset + 1  # last pos reserved for `UNK`
    char_embd = np.eye(dim) * 1  # one-hot embedding for all chars

    @requests
    def foo(self, docs: DocumentArray, **kwargs):
        for d in docs:
            r_emb = [ord(c) - self.offset if self.offset <= ord(c) <= 127 else (self.dim - 1) for c in d.text]
            d.embedding = self.char_embd[r_emb, :].mean(axis=0)  # average pooling

class Indexer(Executor):
    _docs = DocumentArray()  # for storing all documents in memory

    @requests(on='/index')
    def foo(self, docs: DocumentArray, **kwargs):
        self._docs.extend(docs)  # extend stored `docs`

    @requests(on='/search')
    def bar(self, docs: DocumentArray, **kwargs):
        q = np.stack(docs.get_attributes('embedding'))  # get all embeddings from query docs
        d = np.stack(self._docs.get_attributes('embedding'))  # get all embeddings from stored docs
        euclidean_dist = np.linalg.norm(q[:, None, :] - d[None, :, :], axis=-1)  # pairwise euclidean distance
        for dist, query in zip(euclidean_dist, docs):  # add & sort match
            query.matches = [Document(self._docs[int(idx)], copy=True, scores={'euclid': d}) for idx, d in enumerate(dist)]
            query.matches.sort(key=lambda m: m.scores['euclid'].value)  # sort matches by their values

f = Flow(port_expose=12345, protocol='http', cors=True).add(uses=CharEmbed, parallel=2).add(uses=Indexer)  # build a Flow, with 2 parallel CharEmbed, tho unnecessary
with f:
    f.post('/index', (Document(text=t.strip()) for t in open(__file__) if t.strip()))  # index all lines of _this_ file
    f.block()  # block for listening request

2个️⃣打开http://localhost:12345/docs(扩展的Swagger UI)在浏览器中,单击/搜索制表符和输入:

{"data": [{"text": "@requests(on=something)"}]}

也就是说,我们希望从上面的代码片段中找到与以下内容最相似的行@request(on=something)现在单击执行巴顿!

3个️⃣不是图形用户界面的人?那就让我们用Python来做吧!保持上述服务器运行,并启动一个简单的客户端:

from jina import Client, Document
from jina.types.request import Response


def print_matches(resp: Response):  # the callback function invoked when task is done
    for idx, d in enumerate(resp.docs[0].matches[:3]):  # print top-3 matches
        print(f'[{idx}]{d.scores["euclid"].value:2f}: "{d.text}"')


c = Client(protocol='http', port_expose=12345)  # connect to localhost:12345
c.post('/search', Document(text='request(on=something)'), on_done=print_matches)

,它打印以下结果:

         Client@1608[S]:connected to the gateway at localhost:12345!
[0]0.168526: "@requests(on='/index')"
[1]0.181676: "@requests(on='/search')"
[2]0.192049: "query.matches = [Document(self._docs[int(idx)], copy=True, score=d) for idx, d in enumerate(dist)]"

😔不管用吗?我们的错!Please report it here.

阅读教程

支持

加入我们吧

吉娜的后盾是Jina AIWe are actively hiring全栈开发人员、解决方案工程师在开源领域构建下一个神经搜索生态系统

贡献

我们欢迎来自开源社区、个人和合作伙伴的各种贡献。我们的成功归功于你的积极参与



















Rq Python的简单作业队列

RQ(Redis队列)是一个简单的Python库,用于对作业进行排队并在后台与工作者一起处理它们。它是由Redis支持的,它的设计是为了有一个较低的屏障进入。它应该很容易集成到您的Web堆栈中

RQ需要Redis>=3.0.0



可以找到完整的文档here

支持RQ

如果您发现RQ有用,请考虑通过以下方式支持此项目Tidelift

快速入门

当然,首先要运行Redis服务器:

$ redis-server

要将作业放到队列中,您不必执行任何特殊操作,只需定义通常较长或阻塞的函数:

import requests

def count_words_at_url(url):
    """Just an example function that's called async."""
    resp = requests.get(url)
    return len(resp.text.split())

你确实用了优秀的requests包裹,不是吗?

然后,创建RQ队列:

from redis import Redis
from rq import Queue

queue = Queue(connection=Redis())

并将函数调用排队:

from my_module import count_words_at_url
job = queue.enqueue(count_words_at_url, 'http://nvie.com')

安排作业也同样简单:

# Schedule job to run at 9:15, October 10th
job = queue.enqueue_at(datetime(2019, 10, 8, 9, 15), say_hello)

# Schedule job to run in 10 seconds
job = queue.enqueue_in(timedelta(seconds=10), say_hello)

还支持重试失败的作业:

from rq import Retry

# Retry up to 3 times, failed job will be requeued immediately
queue.enqueue(say_hello, retry=Retry(max=3))

# Retry up to 3 times, with configurable intervals between retries
queue.enqueue(say_hello, retry=Retry(max=3, interval=[10, 30, 60]))

有关更完整的示例,请参阅docs但这才是最本质的

这位工人

要开始在后台执行入队的函数调用,请从项目的目录中启动一个工作器:

$ rq worker --with-scheduler
*** Listening for work on default
Got count_words_at_url('http://nvie.com') from default
Job result = 818
*** Listening for work on default

事情就是这样

安装

只需使用以下命令即可安装最新发布的版本:

pip install rq

如果您想要最先进的版本(很可能已损坏),请使用以下命令:

pip install git+https://github.com/nvie/rq.git@master#egg=rq

相关项目

请查看下面这些可能对您的基于RQ的项目有用的报告

项目历史记录

这个项目的灵感来自于CeleryResquethis snippet,并作为celery或其他基于amqp的排队实现的轻量级替代方案而创建。