标签归档:Python

Pytorch-lightning-用于高性能人工智能研究的轻量级PyTorch包装器

Lightning设计理念

Lightning使用以下原则构建PyTorch代码:

Lightning强制您的代码采用以下结构,从而使其可重用和可共享:

  • 研究代码(LightningModule)
  • 工程代码(您删除,并由培训师处理)
  • 非必要的研究代码(日志记录等,这在回调中使用)
  • 数据(使用PyTorch DataLoaders或将其组织到LightningDataModule中)

一旦这样做了,您就可以在多GPU、TPU、CPU上进行培训,甚至可以在不更改代码的情况下进行16位精度的培训!

开始使用我们的2 step guide


持续集成

Lightning在多个GPU、TPU CPU上进行了严格的测试,并针对主要的Python和PyTorch版本进行了测试

当前生成状态
系统/火炬版本 1.4(最低请求。) 1.5 1.6 1.7 1.8(LTS) 1.9(最新)
Conda py3.7[Linux]
Linux py3.7[GPU**]
Linux py3.{6,7}[TPU*]
Linux py3.{6,7,8,9}
OSX py3.{6,7,8,9}
Windows py3.{6,7,8,9}
  • **测试在两个NVIDIA P100上运行
  • *测试在Google GKE TPUv2/3上运行
  • TPU py3.7意味着我们支持Colab和Kaggle环境

如何使用

步骤0:安装

从PyPI轻松安装

pip install pytorch-lightning
其他安装选项

使用可选依赖项安装

pip install pytorch-lightning['extra']

孔达

conda install pytorch-lightning -c conda-forge

安装稳定版1.3.x

1.3[稳定]的实际状态如下:





从源安装未来版本

pip install git+https://github.com/PytorchLightning/pytorch-lightning.git@release/1.3.x --upgrade

安装尖端技术-未来1.4

夜间从源安装(不保证)

pip install https://github.com/PyTorchLightning/pytorch-lightning/archive/master.zip

或通过测试PyPI

pip install -iU https://test.pypi.org/simple/ pytorch-lightning

步骤1:添加这些导入

import os
import torch
from torch import nn
import torch.nn.functional as F
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader, random_split
from torchvision import transforms
import pytorch_lightning as pl

步骤2:定义LightningModule(nn.Module子类)

LightningModule定义完整的系统(即:GAN、自动编码器、BERT或简单图像分类器)

class LitAutoEncoder(pl.LightningModule):

    def __init__(self):
        super().__init__()
        self.encoder = nn.Sequential(nn.Linear(28 * 28, 128), nn.ReLU(), nn.Linear(128, 3))
        self.decoder = nn.Sequential(nn.Linear(3, 128), nn.ReLU(), nn.Linear(128, 28 * 28))

    def forward(self, x):
        # in lightning, forward defines the prediction/inference actions
        embedding = self.encoder(x)
        return embedding

    def training_step(self, batch, batch_idx):
        # training_step defines the train loop. It is independent of forward
        x, y = batch
        x = x.view(x.size(0), -1)
        z = self.encoder(x)
        x_hat = self.decoder(z)
        loss = F.mse_loss(x_hat, x)
        self.log('train_loss', loss)
        return loss

    def configure_optimizers(self):
        optimizer = torch.optim.Adam(self.parameters(), lr=1e-3)
        return optimizer

注:Training_Step定义训练循环。转发定义了LightningModule在推理/预测期间的行为方式

第三步:训练!

dataset = MNIST(os.getcwd(), download=True, transform=transforms.ToTensor())
train, val = random_split(dataset, [55000, 5000])

autoencoder = LitAutoEncoder()
trainer = pl.Trainer()
trainer.fit(autoencoder, DataLoader(train), DataLoader(val))

高级功能

闪电已经过去了40+ advanced features专为专业的大规模人工智能研究而设计

以下是一些示例:

突出显示的功能代码片段
# 8 GPUs
# no code changes needed
trainer = Trainer(max_epochs=1, gpus=8)

# 256 GPUs
trainer = Trainer(max_epochs=1, gpus=8, num_nodes=32)
在不更改代码的TPU上进行培训
# no code changes needed
trainer = Trainer(tpu_cores=8)
16位精度
# no code changes needed
trainer = Trainer(precision=16)
实验管理员
from pytorch_lightning import loggers

# tensorboard
trainer = Trainer(logger=TensorBoardLogger('logs/'))

# weights and biases
trainer = Trainer(logger=loggers.WandbLogger())

# comet
trainer = Trainer(logger=loggers.CometLogger())

# mlflow
trainer = Trainer(logger=loggers.MLFlowLogger())

# neptune
trainer = Trainer(logger=loggers.NeptuneLogger())

# ... and dozens more
提前停止
es = EarlyStopping(monitor='val_loss')
trainer = Trainer(callbacks=[es])
检查点设置
checkpointing = ModelCheckpoint(monitor='val_loss')
trainer = Trainer(callbacks=[checkpointing])
导出为Torchscript(JIT)(生产用途)
# torchscript
autoencoder = LitAutoEncoder()
torch.jit.save(autoencoder.to_torchscript(), "model.pt")
导出到ONNX(生产用途)
# onnx
with tempfile.NamedTemporaryFile(suffix='.onnx', delete=False) as tmpfile:
    autoencoder = LitAutoEncoder()
    input_sample = torch.randn((1, 64))
    autoencoder.to_onnx(tmpfile.name, input_sample, export_params=True)
    os.path.isfile(tmpfile.name)

培训回路的高级控制(高级用户)

对于复杂/专业级别的工作,您可以选择完全控制培训循环和优化器

class LitAutoEncoder(pl.LightningModule):
    def __init__(self):
        super().__init__()
        self.automatic_optimization = False

    def training_step(self, batch, batch_idx):
        # access your optimizers with use_pl_optimizer=False. Default is True
        opt_a, opt_b = self.optimizers(use_pl_optimizer=True)

        loss_a = ...
        self.manual_backward(loss_a, opt_a)
        opt_a.step()
        opt_a.zero_grad()

        loss_b = ...
        self.manual_backward(loss_b, opt_b, retain_graph=True)
        self.manual_backward(loss_b, opt_b)
        opt_b.step()
        opt_b.zero_grad()

相对于非结构化PyTorch的优势

  • 型号变得与硬件无关
  • 代码清晰易读,因为工程代码是抽象出来的
  • 更容易复制
  • 犯的错误更少,因为闪电处理了棘手的工程
  • 保持所有的灵活性(LightningModules仍然是PyTorch模块),但删除了大量的样板文件
  • Lightning与流行的机器学习工具进行了数十次集成
  • Tested rigorously with every new PR我们测试PyTorch和Python支持的版本、每个操作系统、多个GPU甚至TPU的每种组合
  • 最小运行速度开销(与纯PyTorch相比,每历元约300毫秒)

示例

你好,世界
对比学习
NLP
强化学习
愿景
经典ML

社区

闪电社区由

  • 10+ core contributors他们都是来自顶尖人工智能实验室的专业工程师、研究科学家和博士生的混合体
  • 480+活跃的社区贡献者

想要帮助我们构建Lightning并为数千名研究人员减少样板吗?Learn how to make your first contribution here

闪电也是PyTorch ecosystem这要求项目有可靠的测试、文档和支持

寻求帮助

如果您有任何问题,请:

  1. Read the docs
  2. Search through existing Discussions,或add a new question
  3. Join our slack

资金来源

We’re venture funded为确保我们能够提供全天候支持,请聘请全职员工,参加会议,并通过实施您要求的功能加快行动速度


网格AI

网格AI是我们在云上大规模训练模型的平台!

注册我们的免费社区层here

要使用GRID,请使用您的常规命令:

python my_model.py --learning_rate 1e-6 --layers 2 --gpus 4

并将其更改为使用GRID TRAIN命令:

grid train --grid_gpus 4 my_model.py --learning_rate 'uniform(1e-6, 1e-1, 20)' --layers '[2, 4, 8, 16]'

上面的命令将启动(20*4)个实验,每个实验在4个GPU(320个GPU!)上运行-不对代码进行任何更改


牌照

请遵守此存储库中列出的Apache 2.0许可证。此外,Lightning框架正在申请专利

BibTeX

如果您想引用该框架,请随意使用(但只有在您喜欢它的情况下😊)或zenodo

@article{falcon2019pytorch,
  title={PyTorch Lightning},
  author={Falcon, WA, et al.},
  journal={GitHub. Note: https://github.com/PyTorchLightning/pytorch-lightning},
  volume={3},
  year={2019}
}

PySnooper-不再使用打印进行调试

PySnooper-绝不再使用打印进行调试

PySnooper是穷人的调试器。如果你用过Bash,它就像set -x对于Python来说,只是它更华丽

您的故事:您正在试图弄清楚为什么Python代码没有执行您认为它应该执行的操作。您可能希望使用具有断点和监视的功能齐全的调试器,但是您现在不需要费心设置一个调试器

您想知道哪些行正在运行,哪些没有运行,以及局部变量的值是什么

大多数人都会用print战略位置的线条,其中一些线条显示变量的值

PySnooper让您做同样的事情,只是不需要仔细设计正确的print行,您只需向您感兴趣的函数添加一个修饰符行。您将获得函数的逐个播放日志,包括运行哪些行、运行时间以及更改局部变量的确切时间

是什么让PySnooper从所有其他代码智能工具中脱颖而出?您可以在您糟糕的、杂乱无章的企业代码库中使用它,而不必进行任何设置。只需启动修饰符,如下所示,并通过将其路径指定为第一个参数将输出重定向到专用日志文件

示例

我们正在编写一个函数,通过返回位列表将数字转换为二进制。让我们通过添加@pysnooper.snoop()装饰师:

import pysnooper

@pysnooper.snoop()

def number_to_bits(number):
    if number:
        bits = []
        while number:
            number, remainder = divmod(number, 2)
            bits.insert(0, remainder)
        return bits
    else:
        return [0]

number_to_bits(6)

stderr的输出为:

Source path:... /my_code/foo.py
Starting var:.. number = 6
15:29:11.327032 call         4 def number_to_bits(number):
15:29:11.327032 line         5     if number:
15:29:11.327032 line         6         bits = []
New var:....... bits = []
15:29:11.327032 line         7         while number:
15:29:11.327032 line         8             number, remainder = divmod(number, 2)
New var:....... remainder = 0
Modified var:.. number = 3
15:29:11.327032 line         9             bits.insert(0, remainder)
Modified var:.. bits = [0]
15:29:11.327032 line         7         while number:
15:29:11.327032 line         8             number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
15:29:11.327032 line         9             bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
15:29:11.327032 line         7         while number:
15:29:11.327032 line         8             number, remainder = divmod(number, 2)
Modified var:.. number = 0
15:29:11.327032 line         9             bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
15:29:11.327032 line         7         while number:
15:29:11.327032 line        10         return bits
15:29:11.327032 return      10         return bits
Return value:.. [1, 1, 0]
Elapsed time: 00:00:00.000001

或者,如果您不想跟踪整个函数,可以将相关部分包装在with挡路:

import pysnooper
import random

def foo():
    lst = []
    for i in range(10):
        lst.append(random.randrange(1, 1000))

    with pysnooper.snoop():
        lower = min(lst)
        upper = max(lst)
        mid = (lower + upper) / 2
        print(lower, mid, upper)

foo()

它输出类似于以下内容的内容:

New var:....... i = 9
New var:....... lst = [681, 267, 74, 832, 284, 678, ...]
09:37:35.881721 line        10         lower = min(lst)
New var:....... lower = 74
09:37:35.882137 line        11         upper = max(lst)
New var:....... upper = 832
09:37:35.882304 line        12         mid = (lower + upper) / 2
74 453.0 832
New var:....... mid = 453.0
09:37:35.882486 line        13         print(lower, mid, upper)
Elapsed time: 00:00:00.000344

功能

如果您不容易访问stderr,您可以将输出重定向到文件:

@pysnooper.snoop('/my/log/file.log')

您也可以改为传递一个流或一个可调用的,它们将被使用

请查看一些不是局部变量的表达式的值:

@pysnooper.snoop(watch=('foo.bar', 'self.x["whatever"]'))

显示函数调用的函数的监听行:

@pysnooper.snoop(depth=2)

看见Advanced Usage了解更多选项<

使用管道安装

安装的最佳方式是PySnooper是和皮普在一起:

$ pip install pysnooper

其他安装选项

带Conda-Forge通道的Conda:

$ conda install -c conda-forge pysnooper

Arch Linux:

$ yay -S python-pysnooper

Feddora Linux:

$ dnf install python3-pysnooper

许可证

版权所有(C)2019 Ram Rachum and Collaborators,根据麻省理工学院许可发布

媒体报道

Hacker News thread/r/Python Reddit thread(2019年4月22日)

Luigi-Luigi是一个Python模块,可帮助您构建复杂的批处理作业管道

Luigi是一个Python(经3.6、3.7、3.8、3.9测试)包,可帮助您构建复杂的批处理作业管道。它处理依赖项解析、工作流管理、可视化、处理故障、命令行集成等

快速入门

pip install luigi要从安装最新稳定版本,请执行以下操作PyPIDocumentation for the latest release托管在readthedocs上

pip install luigi[toml]要使用安装Luigi,请执行以下操作TOML-based configs支持

对于最尖端的代码,pip install
git+https://github.com/spotify/luigi.git
Bleeding edge documentation也是可用的

背景

Luigi的目的是解决通常与长时间运行的批处理过程相关的所有管道问题。您想要链接许多任务,使其自动化,并使其失败将要发生了。这些任务可以是任何任务,但通常是长时间运行的任务,如Hadoop作业、将数据转储到数据库或从数据库转储数据、运行机器学习算法或其他任何操作

还有其他软件包专注于数据处理的低级方面,例如HivePig,或CascadingLuigi不是取代这些的框架。相反,它可以帮助您将许多任务缝合在一起,其中每个任务都可以是Hive query,aHadoop job in Java,aSpark job in Scala or Python,一段Python代码片段,dumping a table从数据库或其他任何地方。很容易建立由数千项任务组成的长时间运行的管道,需要几天或几周的时间才能完成。Luigi负责大量的工作流管理,这样您就可以专注于任务本身及其依赖关系

您几乎可以构建任何您想要的任务,但是Luigi还附带了一个工具箱您使用的几个常见任务模板。它包括对运行的支持Python mapreduce jobs在Hadoop中,以及Hive,以及Pig、工作。它还附带了file system abstractions for HDFS,以及确保所有文件系统操作都是原子的本地文件。这一点很重要,因为这意味着您的数据管道在包含部分数据的状态下不会崩溃

可视化工具页面

路易吉服务器也有一个网络界面,这样你就可以在所有任务中搜索和过滤了

依赖关系图示例

为了让您了解Luigi做了什么,这是我们在生产中运行的内容的屏幕截图。使用Luigi的可视化工具,我们可以获得工作流依赖图的良好视觉概览。每个节点代表一个必须运行的任务。绿色任务已完成,而黄色任务尚未运行。这些任务大多是Hadoop作业,但也有一些任务在本地运行并构建数据文件

哲学

从概念上讲,Luigi类似于GNU
Make
其中您有特定的任务,而这些任务又可能依赖于其他任务。也有一些相似之处OozieAzkaban一个主要的区别是,Luigi不仅仅是专门为Hadoop构建的,而且很容易用其他类型的任务来扩展它

Luigi中的一切都是Python语言。指定依赖图,而不是XML配置或类似的外部数据文件在Python中这使得构建任务的复杂依赖关系图变得很容易,其中依赖关系可以涉及日期代数或对同一任务的其他版本的递归引用。但是,工作流可以触发非Python形式的内容,例如运行Pig scriptsscp’ing files

谁用路易吉?

我们在内部使用Luigi,地址为Spotify每天运行数千个任务,组织成复杂的依赖关系图。这些任务中的大多数都是Hadoop作业。Luigi提供了一个基础架构,可支持各种内容,包括建议、拓扑列表、A/B测试分析、外部报告、内部仪表板等

由于Luigi是开源的,没有任何注册墙,Luigi用户的确切数量不得而知。但基于独特贡献者的数量,我们预计将有数百家企业使用它。一些用户撰写了关于Luigi的博客帖子或举办了演示文稿:

一些更多的公司正在使用Luigi,但还没有机会写下这一点:

我们非常高兴在这里加入贵公司。只需在GitHub上发送公关

外部链接

作者

路易吉建于Spotify,主要由Erik BernhardssonElias FreiderMany other people自2012年末开源以来做出了贡献Arash Rouhani曾在2015年至2019年担任首席维护员,现在Spotify的数据团队维护Luigi

Dash Python、R、Julia和Jupyter的分析型Web应用程序

DASH是用于构建ML和数据科学Web应用程序的下载最多、最值得信赖的Python框架

Dash构建在Plotly.js、Reaction和Flask之上,它将现代UI元素(如下拉列表、滑块和图形)直接绑定到您的分析Python代码。阅读我们自豪地制作的教程❤️由破折号本身

应用程序示例

应用程序 描述
这里有一个简单的Dash App示例,它将下拉菜单绑定到D3.js Ploly Graph。当用户在下拉列表中选择一个值时,应用程序代码会动态地将数据从Google Finance导出到Pandas DataFrame。这个应用程序是刚刚编写的43代码行(view the source)
DASH应用程序代码是声明性和反应性的,这使得构建包含许多交互元素的复杂应用程序变得很容易。下面是一个具有5个输入、3个输出和交叉滤波的示例。此应用程序仅由160行代码组成,所有代码均为Python
破折号使用Plotly.js用来绘制图表。支持超过35种图表类型,包括地图
DASH不仅仅适用于仪表盘。您可以完全控制应用程序的外观。这是一个样式设置为PDF报表的Dash应用程序

要了解有关Dash的更多信息,请阅读extensive announcement letterjump in with the user guide

DASH OSS和DASH Enterprise

使用Dash Open Source,Dash应用程序可在本地笔记本电脑或工作站上运行,但组织中的其他人无法轻松访问

当您的Dash应用程序准备好在部门或公司范围内使用时,使用Dash Enterprise进行纵向扩展。或者,从一开始就使用Dash Enterprise启动您的计划,从Ploly的团队中获得开发人员工作效率的提升和实践加速

ML Ops功能:为ML Ops提供一站式服务:为您的Dash应用程序提供水平可扩展的托管、部署和身份验证。不需要IT或DevOps

  • App manager无需IT或DevOps团队即可部署和管理Dash应用程序。应用程序管理器为您提供对Dash部署的所有方面的点击式控制
  • Kubernetes scaling确保Dash应用程序的高可用性,并利用Dash Enterprise的Kubernetes架构进行横向扩展。不需要IT或掌舵
  • No code auth只需点击几下即可控制Dash应用程序访问。Dash Enterprise支持LDAP、AD、PKI、OKTA、SAML、OpenID Connect、OAuth、SSO和简单的电子邮件身份验证
  • Job Queue作业队列是构建可伸缩的Dash应用程序的关键。将繁重的计算从同步Dash回调移动到作业队列以进行异步后台处理

低码特性:低码Dash应用程序功能,极大地提高了开发人员的工作效率

  • Design Kit像专业人士一样设计,不需要编写一行CSS。轻松安排、设置样式、打造品牌和自定义Dash应用程序
  • Snapshot Engine将Dash应用程序视图保存并共享为链接或PDF。或者,通过Dash运行Python作业,并在作业完成后让快照引擎通过电子邮件发送报告
  • Dashboard ToolkitDash应用程序的拖放布局、图表编辑和交叉过滤器
  • Embedding在不使用IFrame的情况下,在现有Web应用程序或网站中本地嵌入Dash应用程序

企业人工智能功能:您的数据科学团队快速交付AI/ML研究和业务计划所需的一切

  • AI App MarketplaceDash Enterprise附带了数十个Dash应用程序模板,用于解决AI/ML影响最大的业务问题
  • Big Data for Pything连接到Python最流行的大数据后端:Dask、Databricks、NVIDIA Rapids、Snowflake、Postgres、Vaex等
  • GPU & Dask AccelerationDash Enterprise将适用于GPU和并行CPU计算的最流行的Python HPC堆栈交到了企业用户手中
  • Data Science Workspaces从第一天开始高效工作。从Dash Enterprise的板载代码编辑器编写并执行Python、R和Julia代码

看见https://plotly.com/contact-us/为了取得联系

IPython 官方存储库 包含网站、文档构建等内容

IPython:高效交互计算

概述

欢迎来到IPython。有关我们的完整文档,请访问ipython.readthedocs.io并包含有关如何安装、使用和参与项目的信息。IPython(交互式Python)是用于多种编程语言交互计算的命令shell,最初是为Python编程语言开发的,它提供自检、富媒体、shell语法、制表符完成和历史记录

IPython版本和Python支持

从IPython 7.10开始,IPython紧随其后NEP 29

IPython 7.17+需要Python版本3.7及更高版本

IPython 7.10+需要Python 3.6版和更高版本

IPython 7.0需要Python 3.5版和更高版本

IPython 6.x需要Python 3.3版和更高版本

IPython 5.x LTS是与Python2.7兼容的版本。如果您需要Python 2支持,您可以必须使用IPython 5.x LTS。请根据需要更新您的项目配置和要求

笔记本、Qt控制台和许多其他部件现在是朱庇特请参阅Jupyter installation docs如果你想用这些

IPython的主要功能

全面的对象自省

输入历史记录,跨会话持久

在具有自动生成的引用的会话期间缓存输出结果

可扩展的制表符完成,默认情况下支持完成python变量和关键字、文件名和函数关键字

可扩展的“魔术”命令系统,用于控制环境并执行许多与IPython或操作系统相关的任务

丰富的配置系统,可在不同设置之间轻松切换(比每次更改$PYTHONSTARTUP环境变量更简单)

会话记录和重载

用于特殊目的情况的可扩展语法处理

访问具有用户可扩展别名system的系统外壳

可轻松嵌入到其他Python程序和GUI中

对PDB调试器和Python探查器的集成访问

开发与即时运行

您可以在上找到最新版本的开发文档readthedocs

通过在终端键入以下命令,甚至无需在系统范围内安装IPython,即可从该目录运行IPython:

$ python -m IPython

或查看development installation docs有关最新版本的信息,请阅读文档

旧版本IPython的文档和安装说明可在IPython website

IPython需要Python版本3或更高版本

从版本6.0开始,IPython不支持Python 2.7、3.0、3.1或3.2

要获得与Python 2.7兼容的版本,请安装5.x LTS长期支持版本

如果您遇到此错误消息,您可能正在尝试从源代码安装或使用IPython。您需要检查远程5.x分支机构。如果您使用的是GIT,则应该可以执行以下操作:

$ git fetch origin
$ git checkout 5.x

如果您在常规安装IPython时遇到此错误消息,则可能需要更新包管理器,例如,如果您使用的是pip,请使用以下命令检查pip的版本:

$ pip --version

您需要将pip更新到9.0.1版或更高版本。如果您使用的不是pip,请向软件包的维护人员咨询您的软件包管理器。

有关更多信息,请参阅我们的博客帖子之一:

https://blog.jupyter.org/release-of-ipython-5-0-8ce60b8d2e8e

以及以下拉式请求以供讨论:

https://github.com/ipython/ipython/pull/9900

如果您正在调用setup.py直接-这是您不应该使用的-使用或正在使用easy_install如果是这种情况,请使用pip
install .
而不是setup.py install,以及pip install -e .而不是setup.py develop如果您依赖IPython作为依赖项,则可能还希望对IPython具有条件依赖项,具体取决于Python版本:

install_req = ['ipython']
if sys.version_info[0] < 3 and 'bdist_wheel' not in sys.argv:
    install_req.remove('ipython')
    install_req.append('ipython<6')

setup(
    ...
    install_requires=install_req
)

IPython的替代方案

IPython可能不合您的口味;如果是这样,您可能想要使用类似的项目:

忽略带有git故障的提交。忽略reRevsFile

从GIT 2.23开始,可以在不中断的情况下进行格式更改git blame请参阅git documentation有关更多详细信息,请参阅

要使用此功能,您必须:

  • 安装Git>=2.23
  • 通过运行以下命令配置您的本地GIT存储库:
    • POSIX:tools\configure-git-blame-ignore-revs.sh
    • 窗口:tools\configure-git-blame-ignore-revs.bat

从cookiecutter(项目模板)创建项目的命令行实用程序,例如Python包项目、VueJS项目

从以下位置创建项目的命令行实用程序Cookiecuters(项目模板),例如从Python包项目模板创建Python包项目

我们为能成为以下项目的开源赞助商而感到自豪PyCon 2016

功能

是不是有人说有特写?

  • 跨平台:官方支持Windows、Mac、Linux
  • 您无需了解/编写Python代码即可使用Cookiecuter
  • 适用于Python 3.6、3.7、3.8、3.9和PyPy3
  • 项目模板可以是任何编程语言或标记格式:Python、JavaScript、Ruby、CoffeeScript、RST、Markdown、CSS、HTML等等。您可以在同一项目模板中使用多种语言
  • 简单的命令行用法:
# Create project from the cookiecutter-pypackage.git repo template
# You'll be prompted to enter values.
# Then it'll create your Python package in the current working directory,
# based on those values.
$ cookiecutter https://github.com/audreyfeldroy/cookiecutter-pypackage
# For the sake of brevity, repos on GitHub can just use the 'gh' prefix
$ cookiecutter gh:audreyfeldroy/cookiecutter-pypackage
  • 在带有本地模板的命令行中使用它:
# Create project in the current working directory, from the local
# cookiecutter-pypackage/ template
$ cookiecutter cookiecutter-pypackage/
  • 或者从Python中使用它:
from cookiecutter.main import cookiecutter

# Create project from the cookiecutter-pypackage/ template
cookiecutter('cookiecutter-pypackage/')

# Create project from the cookiecutter-pypackage.git repo template
cookiecutter('https://github.com/audreyfeldroy/cookiecutter-pypackage.git')
  • 目录名和文件名可以模板化。例如:
{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}.py
  • 支持无限级别的目录嵌套
  • 100%的模板使用JJAA2完成。这包括文件名和目录名
  • 只需在cookiecutter.json文件。例如:
{
    "full_name": "Audrey Feldroy",
    "email": "audreyr@gmail.com",
    "project_name": "Complexity",
    "repo_name": "complexity",
    "project_short_description": "Refreshingly simple static site generator.",
    "release_date": "2013-07-10",
    "year": "2013",
    "version": "0.1.1"
}
  • 除非你用来压制它--no-input,系统将提示您输入:
    • 提示是中的关键cookiecutter.json
    • 默认响应为中的值cookiecutter.json
    • 提示按顺序显示
  • 跨平台支持~/.cookiecutterrc文件:
default_context:
    full_name: "Audrey Feldroy"
    email: "audreyr@gmail.com"
    github_username: "audreyfeldroy"
cookiecutters_dir: "~/.cookiecutters/"
  • Cookiecutters(克隆的Cookiecutter项目模板)被放入~/.cookiecutters/缺省情况下,或cookiecutters_dir(如果指定
  • 如果您已经将Cookiecuter克隆到~/.cookiecutters/,您可以按目录名引用它:
# Clone cookiecutter-pypackage
$ cookiecutter gh:audreyfeldroy/cookiecutter-pypackage
# Now you can use the already cloned cookiecutter by name
$ cookiecutter cookiecutter-pypackage
  • 您可以直接从Bitbucket上的Git repos或Mercurial repos使用本地cookiecutter或远程cookiecutter
  • 默认上下文:指定希望在生成项目时用作默认值的键/值对
  • 使用命令行参数注入额外的上下文:
cookiecutter --no-input gh:msabramo/cookiecutter-supervisor program_name=foobar startsecs=10
  • 直接访问Cookiecutter API允许插入额外的上下文
  • 生成前和生成后挂接:在生成项目之前或之后运行的Python或shell脚本
  • 可以将本地项目的路径指定为绝对路径或相对路径
  • 指定的情况下,生成到当前目录或目标目录的项目-o选项

可用的Cookiecuters

制作好的饼干需要很多饼干制作者和贡献者。我们很高兴有很多Cookiecutter项目模板可供选择。我们希望您能找到适合您需要的炊具。

装满了炊事工的储藏室

开始搜索特定的、随时可以使用的Cookiecuter模板的最佳位置是Github search只需键入即可cookiecutter您将发现4000多个相关存储库

我们还建议您查看相关的GitHub主题。供一般搜索使用cookiecutter-template对于特定主题,请尝试使用cookiecutter-yourtopic,就像cookiecutter-pythoncookiecutter-datascience这是GitHub的一项新功能,因此目前并不是所有的活动存储库都使用它

如果您是模板开发人员,请添加相关内容topics使用cookiecutter存储库的前缀。我们相信这将使它更容易被发现。你几乎不受话题数量的限制,使用它吧!

炊事员特色菜

这些Cookiecuter由Cookiecuter团队维护:

社区

核心提交者团队可以在authors section我们随时欢迎并邀请您参加

卡住了?尝试以下操作之一:

  • 请参阅Troubleshooting页面
  • 在以下方面寻求帮助Stack Overflow
  • 我们强烈鼓励您file an issue关于这个问题,即使只是“我不能让它在这个Cookiecuter上工作”,并带有指向您的Cookiecuter的链接。不要担心如何恰当地命名/查明问题
  • 在以下方面寻求帮助Slack如有必要(但请先尝试其他选项之一,以便其他人可以从讨论中受益)

Cookiecuter上的开发是由社区驱动的:

  • 非常感谢所有contributors他们为帮助Cookiecuter成为更好的工具贡献了自己的力量
  • 每个人都被邀请贡献自己的力量。请阅读contributing instructions,然后开始
  • 与上的其他Cookiecuter贡献者和用户联系Slack(注意:由于工作和承诺的原因,核心提交者可能并不总是有空)

鼓励是令人难以置信的激励。如果您希望在Cookiecutter上完成更多工作,请显示支持:

有批评或投诉吗?

  • File an issue这样Cookiecuter就可以改进了。对可以做得更好的事情表现出友好和建设性的态度。提出详细建议
  • 让我们了解最新情况,这样我们就能提供帮助例如,如果您正在讨论邮件列表上的Cookiecutter问题,file an issue链接到讨论主题和/或抄送电子邮件中至少一名核心提交人的位置
  • 要鼓励别人。像“这个函数应该像这样重写”这样的评论比像“Eww,看看这个函数有多糟糕”这样的评论更有可能导致行动。

等待对问题/问题的答复?

  • 要有耐心,要坚持不懈。所有问题都在核心提交者团队的雷达上,并将经过深思熟虑,但我们有很多问题需要解决。如果紧急,可以用提示ping问题中的核心提交者
  • 请他人发表评论、讨论、评论等
  • 在Cookiecuter存储库中搜索与您的问题相关的问题
  • 急需修复/功能/版本/帮助,等不及了吗?@audreyfeldroy可供租用进行咨询或定制开发

支持此项目

这个项目是由志愿者运营的。不久,我们将为组织和个人提供支持该项目的手段

行为规范

在Cookiecutter项目的代码库、问题跟踪器、聊天室和邮件列表中交互的每个人都应该遵循PyPA Code of Conduct

Pyspider 一个功能强大的Python爬虫(Web Crawler)系统

一个功能强大的Python蜘蛛(Web Crawler)系统

  • 用Python编写脚本
  • 功能强大的WebUI,具有脚本编辑器、任务监视器、项目管理器和结果查看器
  • MySQLMongoDBRedisSQLiteElasticsearchPostgreSQL使用SQLAlchemy作为数据库后端
  • RabbitMQRedisKombu作为消息队列
  • 任务优先级、重试、定期、按时间重新爬网等
  • 分布式架构、爬行Javascript页面、Python2.{6,7}、3.{3,4,5,6}支持等

教程:http://docs.pyspider.org/en/latest/tutorial/
文档:http://docs.pyspider.org/
发行说明:https://github.com/binux/pyspider/releases

示例代码

from pyspider.libs.base_handler import *


class Handler(BaseHandler):
    crawl_config = {
    }

    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl('http://scrapy.org/', callback=self.index_page)

    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc('a[href^="http"]').items():
            self.crawl(each.attr.href, callback=self.detail_page)

    def detail_page(self, response):
        return {
            "url": response.url,
            "title": response.doc('title').text(),
        }

安装

警告:默认情况下,WebUI对公众开放,它可以用来执行任何可能损害您的系统的命令。请在内部网络中使用,或者enable need-auth for webui

快速入门:http://docs.pyspider.org/en/latest/Quickstart/

贡献力量

待办事项

v0.4.0

  • 可视化的抓取界面,如portia

许可证

根据Apache许可证2.0版进行许可

Sanic-异步Python 3.7+Web服务器/框架|快速构建

SANIC|快速构建。跑得很快

构建
文档
套餐
支持
统计数据

Sanic是一家Python 3.7+Web服务器和Web框架,它们都是为快速运行而编写的。它允许使用async/awaitPython3.5中添加的语法可使您的代码实现非阻塞和快速

Sanic也符合ASGI,因此您可以使用alternative ASGI webserver

Source code on GitHub|Help and discussion board|User Guide|Chat on Discord

该项目由社区维护,为社区服务。欢迎投稿!

该项目的目标是提供一种简单的方法来设置和运行易于构建、易于扩展并最终可扩展的高性能HTTP服务器

赞助商

使用完整的源代码树上下文在IDE中管理拉请求和执行代码审查。评论任何一行,而不仅仅是不同之处。将跳转到定义、您最喜欢的键绑定和代码智能用于更多工作流

Learn More

感谢我们的赞助商。检查open collective了解有关帮助资助Sanic的更多信息

安装

pip3 install sanic

Sanic利用uvloopujson来帮助提高绩效。如果您不想使用这些软件包,只需添加一个环境变量SANIC_NO_UVLOOP=trueSANIC_NO_UJSON=true在安装时

$ export SANIC_NO_UVLOOP=true
$ export SANIC_NO_UJSON=true
$ pip3 install --no-binary :all: sanic

注意事项

如果您正在全新安装的Fedora 28或更高版本上运行,请确保您有redhat-rpm-config安装软件包,以防您要使用sanic使用ujson依赖性

注意事项

Windows支持目前是“试验性的”,并且是在尽最大努力的基础上。Windows当前也不支持多个工作进程(请参见Issue #1517),但设置workers=1应成功启动服务器

Hello World示例

from sanic import Sanic
from sanic.response import json

app = Sanic("My Hello, world app")

@app.route('/')
async def test(request):
    return json({'hello': 'world'})

if __name__ == '__main__':
    app.run()

SANIC现在可以使用以下工具轻松运行sanic hello.app

[2018-12-30 11:37:41 +0200] [13564] [INFO] Goin' Fast @ http://127.0.0.1:8000
[2018-12-30 11:37:41 +0200] [13564] [INFO] Starting worker [13564]

而且,我们可以验证它是否正常工作:curl localhost:8000 -i

HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 5
Content-Length: 17
Content-Type: application/json

{"hello":"world"}

现在,让我们快点造点东西吧!

最低Python版本为3.7。如果您需要Python 3.6支持,请使用v20.12LTS

文档

User GuideAPI Documentation

更改日志

Release Changelogs

问题和讨论

Ask a question or join the conversation

贡献

我们总是很高兴有新的贡献。我们有marked issues good for anyone looking to get started,欢迎您的到来questions on the forums请看一下我们的Contribution guidelines

Streamlit-Streamlight-使用Python构建数据应用程序的最快方式

欢迎来到Streamlight👋

构建和共享数据应用程序的最快方式

Streamlight可以让您在几分钟内将数据脚本转换为可共享的Web应用程序,而不是几周。这都是Python,开源的,免费的!一旦您创建了应用程序,您就可以使用我们的free sharing platform要部署、管理和与全世界共享您的应用程序,请执行以下操作

安装

pip install streamlit
streamlit hello

Streamlight还可以安装在虚拟环境中WindowsMac,以及Linux

举个小例子

Streamlight使构建交互式应用程序变得极其简单:

import streamlit as st

x = st.slider('Select a value')
st.write(x, 'squared is', x * x)

一个更大的例子

Streamlitt简单而集中的API让您可以构建极其丰富和强大的工具。This demo project允许您浏览整个Udacity self-driving-car dataset类并实时运行推理。YOLO object detection net

完整的演示用不到300行Python代码实现。事实上,这款应用程序包含only 23 Streamlit calls它展示了Streamlight的所有主要构建块。您现在可以在以下地址尝试share.streamlit.io/streamlit/demo-self-driving

Streamlight GitHub徽章

Streamlight的GitHub徽章可帮助其他人找到并使用您的Streamlight应用程序

部署应用程序后,您可以将此徽章直接嵌入到GitHub readme.md中,如下所示:

[![Streamlit App](https://static.streamlit.io/badges/streamlit_badge_black_white.svg)](https://share.streamlit.io/yourGitHubName/yourRepo/yourApp/)

更多信息

为团队提供流光照明

Streamlit for Teams是我们的企业解决方案,用于部署、管理、共享和协作您的Streamlight应用程序。Streamlight for Teams提供安全的单击部署、身份验证、Web编辑、版本控制等功能。它目前处于封闭测试阶段,您可以join the wait-list here

许可证

Streamlight是完全免费和开源的,并在Apache 2.0许可证

Python Bokeh 浏览器中的交互式数据可视化




Bokeh是一个用于现代Web浏览器的交互式可视化程序库。它提供优雅、简洁的多功能图形构造,并在大型或流式数据集上提供高性能的交互性。Bokeh可以帮助任何想要快速、轻松地制作交互式绘图、仪表板和数据应用程序的人

最新版本
孔达

许可证

PyPI

赞助

实时教程

生成状态 静电分析
支持

推特

如果你喜欢伯克并愿意支持我们的使命,请考虑making a donation











































安装

安装Bokeh的最简单方法是使用Anaconda Python distribution及其包含的孔达包裹管理系统。要安装Bokeh及其所需的依赖项,请在Bash或Windows命令提示符下输入以下命令:

conda install bokeh

要使用pip进行安装,请在Bash或Windows命令提示符下输入以下命令:

pip install bokeh

有关更多信息,请参阅installation documentation

资源

安装Bokeh后,请查看first steps guides

访问full documentation site要查看User’s Guidelaunch the Bokeh tutorial要在实时Jupyter笔记本中了解Bokeh,请执行以下操作

社区支持可在Project Discourse

如果您想对Bokeh做出贡献,请查看Developer Guiderequest an invitation to the Bokeh Dev Slack workspace

注意:在Bokeh项目的代码库、问题跟踪器和论坛中互动的每个人都应该遵循Code of Conduct

跟我们走吧

关注我们的推特@bokeh

支持

财政支持

Bokeh项目对此表示感谢individual contributions以下组织和公司提供赞助和支持:

















如果您的公司使用Bokeh并能够赞助该项目,请联系info@bokeh.org

Bokeh是NumFOCUS的赞助项目,NumFOCUS是美国的501(C)(3)非营利性慈善机构。NumFOCUS为Bokeh提供财政、法律和行政支持,以帮助确保项目的健康和可持续性。参观numfocus.org了解更多信息

对Bokeh的捐款由NumFOCUS管理。对于美国的捐赠者,您的捐赠在法律规定的范围内是免税的。与任何捐赠一样,您应该就您的具体税务情况咨询您的税务顾问。

实物支持

Bokeh项目还感谢以下公司捐赠的服务:

安全性

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