调用 image = Image.open(data) image.thumbnail((36,36), Image.NEAREST) 将保持宽高比。 但是我需要最终显示像这样的图像: <img src="/media/image.png" style="height:36px; width:36px" /> 我可以在图像上使用透明或白色的信箱风格吗?
虽然这个问题有一个python后端,但问题不是绑定到python本身,而是关于扩展机制以及如何注册/查找插件。 在python中,入口点的概念是由setuptools引入的,并且与已安装的python发行版的元数据(称为其他包装系统中的包)有关。 就我的理解而言,入口点提供的function之一是允许应用程序定义其他人可以放入的地方,所以任何想要使用入口点的应用程序都可以获得注册类/函数列表。 举个例子: Foo定义入口点“entrypoint1”并查找以这个名字注册的插件。 Bar在“entrypoint1”入口点上注册一个可调用的( Bar.callable )。 任何python脚本都可以将Bar.callable列为“entrypoint1”的注册可调用对象之一。 使用setuptools,应用程序在安装时注册入口点,信息存储在与打包有关的元数据中,称为.egginfo(通常包含有关分发名称,依赖关系以及一些关于打包的元数据的信息)。 我觉得打包元数据不适合存储这种信息,因为我不明白为什么这些信息与打包有关。 我很好奇听到其他语言的入口点/扩展/插件function,特别是如果这个概念与元数据和打包相关联。 所以问题是… 你有我应该看的例子吗? 你能解释为什么deviseselect是这样做的吗? 你能看到不同的方法来处理这个问题吗? 你知道这个问题在不同的工具中已经被解决了吗? 目前的python实现有什么缺点和优势? 到目前为止,我发现了什么 我在不同的项目中发现了一种创build和分发“插件”的方法,这些插件特别关注“我们如何制作插件”。 例如, libpeas (gobject插件框架)定义了一组通过指定插件来扩展默认行为的方法。 虽然这很有趣,但我只是对“注册和发现”(并最终加载)部分内容感兴趣。 以下是我迄今为止的一些发现: Libpeas定义了自己的元数据文件 (* .plugin),它存储了关于可调用types的信息(可以在不同的语言中使用不同的插件)。 这里的主要信息是要加载的模块的名称。 Maven有一个devise文档,其中包含有关如何pipe理东西的信息。 Maven使用它们的依赖和元数据来pipe理插件,所以看起来像是一个有趣的地方来寻找他们如何实现的东西 。 正如在他们的文档中指出的, Maven插件在类上使用注释 ( @goal ),然后用它来查找所有使用特定@goal注册的插件。 虽然这种方法在静态语言中是可能的,但它不在解释型语言中,因为我们只知道在一个给定时间点可能的类/可调用对象是什么,这些可能会改变。 Mercurial使用一个中央configuration文件 ( ~/.hgrc ),包含插件名称到可以find的path的映射。 一些更多的想法 虽然这不是对这个问题的答案,但是也注意到setuptools入口点是如何实现的,以及它们在性能方面如何与mercurial的进行比较。 当你用setuptools要求一个特定的入口点时, 所有的元数据都会在运行时被读取,并且列表就是以这种方式构build的 。 这意味着如果你的path上有很多python发行版,这个阅读可能需要一些时间。 另一方面,Mercurial把这些信息硬编码到一个单独的文件中,这意味着你必须在那里指定你的可调用的完整path,然后直接从configuration文件中“发现”但是“已读”。 这允许更细粒度的configuration应该是可用的,什么不应该和似乎更快。 另一方面,由于pythonpath可以在运行时改变,这意味着以这种方式提供的可调用对象将不得不根据path进行检查,以便知道它们是否应该被返回或者不是在所有情况下。 为什么入口点目前与包装有关 了解为什么入口点与setuptools中的包装相关联也是很有趣的。 主要原因是python发行版可以在安装时注册自己的一部分作为扩展入口点:安装意味着注册入口点:不需要额外的注册步骤。 虽然这在大多数情况下(当实际安装python发行版时)工作得很好,但是当它们没有安装或者没有被打包的时候,它不会。 […]
编辑:我在这里问了一个相反的问题: 如何embeddedPython3与标准库 这里提供了一个Python2的解决scheme: 是否可以在没有标准库的情况下embeddedpython? 但是,Python3在Py_Initialize();上失败Py_Initialize(); 有: Fatal Python error: Py_Initialize: unable to load the file system codec ImportError: No module named 'encodings' 这是有道理的,因为py3源文件默认是utf-8。 所以它似乎只需要一个外部的二进制文件来parsingpy3源文件。 那么该怎么办? 它看起来好像我需要在我的系统Python安装中findencodings二进制文件,将其复制到我的项目树中,并设置一些环境variablesPYTHONPATH(?)以便我的libpython.dylib可以find它。 是否有可能避免这种情况? 如果没有,任何人都可以澄清我需要采取的步骤? 会不会有更多的打嗝? 注:对于后代,这是我得到一个独立的libpython.dylib链接到我的项目在OSX上: 首先我find我的系统Python的库: /usr/local/Frameworks/Python.framework/Versions/3.4/Python (在我的情况下,它是用自制软件安装的)。 现在我: 将.dylib复制到我的项目文件夹中创build./Libs/libpython3.4.1_OSX.dylib 进入生成build settings -> linking并将other linker flags设置为-lpython3.4.1_OSX 在这一点上,它似乎工作。 但是,如果您知道尝试在新的OSX安装上构build它,它将会失败。 这是因为: $ otool -D ./libpython3.4.1_OSX.dylib ./libpython3.4.1_OSX.dylib: /usr/local/Frameworks/Python.framework/Versions/3.4/Python .dylib仍然保留在旧的位置。 .dylib包含一个指向它的位置的链接真的很奇怪,因为使用它的任何东西都必须知道它在哪里以便首先调用它。 我们可以纠正这个: $ install_name_tool […]
TL / DR: import gc, sys print len(gc.get_objects()) # 4073 objects in memory # Attempt to unload the module import httplib del sys.modules["httplib"] httplib = None gc.collect() print len(gc.get_objects()) # 6745 objects in memory 更新我已经联系了Python开发者关于这个问题,并且实际上在“未来五年”中将不可能完全卸载一个模块 。 (请参阅链接) 请接受,Python确实不支持在2.x中卸载严重的,基本的,难以克服的技术问题的模块。 在我最近在我的应用程序中寻找memleak的时候,我把它缩小到了模块,也就是我无法收集一个卸载的模块。 使用下面列出的任何方法卸载模块会在内存中留下数千个对象。 换句话说 – 我不能在Python中卸载一个模块 问题的其余部分是试图以某种方式垃圾收集模块。 咱们试试吧: import gc import sys sm = sys.modules.copy() # httplib, which […]
我正在学习编程(python和algorithm),并试图在一个我觉得有趣的项目上工作。 我已经创build了几个基本的Python脚本,但我不知道如何解决我正在尝试构build的游戏的解决scheme。 以下是游戏的运作方式: 用户将被赋予具有价值的项目。 例如 Apple = 1 Pears = 2 Oranges = 3 他们将有机会select他们喜欢的任何组合(即100个苹果,20个梨子和1个桔子)。 计算机唯一的输出是总价值(在这个例子中,目前是143美元)。 电脑会试图猜测他们有什么。 这显然不能够正确的第一回合。 Value quantity(day1) value(day1) Apple 1 100 100 Pears 2 20 40 Orange 3 1 3 Total 121 143 接下来用户可以修改他们的数量,但不超过总数量的5%(或者我们可能select的其他百分比,例如5%)。 水果的价格可以随意改变,所以总价值也可以改变(为了简单起见,我不改变水果价格)。 使用上面的例子,在游戏的第二天,用户在第三天返回一个$ 152和$ 164的值。下面是一个例子。 quantity(day2) %change(day2) value(day2) quantity(day3) %change(day3) value(day3) 104 104 106 106 21 42 23 46 […]
我正在寻找一个Python的交互式graphics库。 “ 图 ”是指由一组顶点连接起来的一组节点(不是xy轴上的一个值的图,也不是一个像素的网格)。 通过“交互”,我的意思是我可以拖放节点,我需要能够点击节点/顶点,并让库传递节点/顶点到我的callback,这可能会添加/删除节点/顶点或显示信息(由于数据集太大/复杂,我不能在启动时加载完整的graphics,而是根据用户input只加载必要的数据切片)。 通过Python,我的意思是编程语言Python ,graphics库应该有CPython绑定。 我有Python 2.7和Python 3.1,但可以降级到2.6如果有必要。 这种语言要求是因为我正在使用的数据集只有Python绑定。 graphics库必须支持有向图,并能自动布局节点。 我需要在节点上放置标签。 优选地,布局algorithm应该使相邻的节点彼此靠近。 在我4岁的笔记本电脑上,我应该能够处理100-1000个节点和大约300-4000个顶点(我通常从大约100个节点开始,但是数量可能会根据用户的input而扩大)。 最好它应该是一个没有太多依赖的库(可能除了Gnome)。 开源是首选。 我已经使用Tkinter Canvas编写了一个简单的程序原型,但是我需要一个更严格的graphics库来扩展程序。 我看过graphviz和matplotlib,但显然他们只是用静态graphics工作,显然需要大量的工作来完成交互操作(如果我错了,纠正我,我只是简单地看了一下) 。 我也尝试生成一个SVG文件的graphics,并使用Inkscape来查看它,但它太慢,需要太多的内存,由于顶点的数量,它变成了一个混乱。
我正在尝试使用蓝图在Flask中创build一个“模块化应用程序”。 然而,在创build模型时,我遇到了必须引用应用程序以获取由Flask-SQLAlchemy提供的db -object的问题。 我想能够使用一个以上的应用程序的蓝图(类似于如何使用Django应用程序),所以这不是一个好的解决scheme。 有可能做一个switcharoo,并让蓝图创builddb实例,然后应用程序将其与蓝图的其余部分一起导入。 但是,任何其他希望创build模型的蓝图都需要从蓝图中导入,而不是从应用程序导入。 我的问题是这样的: 有没有办法让Blueprints定义模型,而没有意识到他们以后使用的应用程序 – 并且有几个蓝图组合在一起? 通过这个,我的意思是不得不从你的蓝图导入应用程序模块/包。 我从一开始就错了吗? 蓝图是不是意味着独立的应用程序和可重新分发(àDjango的应用程序)? 如果不是,那么你应该使用什么样的模式来创build类似的东西? 烧瓶扩展? 如果你不这样做 – 也许集中所有模型/模式在Ruby on Rails? 编辑 :我一直在思考这个问题,这可能与Flask更多地涉及SQLAlchemy,因为在声明模型时你必须有declarative_base() 。 无论如何,这都是从某个地方来的! 也许最好的解决scheme是将你的项目模式定义在一个地方,并像Ruby on Rails那样分布。 声明式的SQLAlchemy类定义实际上比schema.rb更像是Django的models.py。 我想这也可以使迁移更容易(从alembic或sqlalchemy迁移 )。 我被要求提供一个例子,所以让我们做一些简单的事情吧:假设我有一个蓝图来描述数据库中存储的简单的“静态”内容。 它使用一个只有短名称(对于URL),一个标题和一个正文的表。 这是simple_pages/__init__.py : from flask import Blueprint, render_template from .models import Page flat_pages = Blueprint('flat_pages', __name__, template_folder='templates') @flat_pages.route('/<page>') def show(page): page_object = Page.query.filter_by(name=page).first() return […]
是否有任何工具会采用特定的正则expression式,并根据正则expression式所匹配的特定字符数所需的操作数返回最差的情况? 例如,给定一个(f|a)oo.*[ ]baz ,引擎可能通过多less个步骤来匹配100个字符? 如果有一个工具,可以采取一堆文本样本,并显示每个运行的平均操作,我也会感兴趣。 我意识到这将取决于所使用的引擎和实现 – 但我不知道这是多么普遍。 所以,如果它是很多语言的常见(使我的问题太模糊),我会特别感兴趣的Perl和Python。
在集成一个我以前没有用过的Django应用程序的时候,我发现了两种不同的用于在类中定义函数的方法。 作者似乎非常有意地使用它们。 第一个是我自己用的很多: class Dummy(object): def some_function(self,*args,**kwargs): do something here self is the class instance 另一个是我不使用的,主要是因为我不明白什么时候使用它,以及为什么: class Dummy(object): @classmethod def some_function(cls,*args,**kwargs): do something here cls refers to what? 在Python文档中, classmethod装饰classmethod这句话来解释: 类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。 所以我想cls是指Dummy本身( class ,而不是实例)。 我不完全明白为什么会这样,因为我总是可以这样做: type(self).do_something_with_the_class 这只是为了清楚起见,还是我错过了最重要的部分:没有它的事情是不可能做到的令人着迷和迷人的事情?
我想创build一个loginAPI(或使用现有的一个,如果它已经预先捆绑)使用Djangorest框架。 不过,我完全不知所措。 每当我发送到Djangorest框架“login”的url发送请求,它只是发回可浏览的API模板页面… 我的configuration urls.py url(r'^api/v1/', include('rest_framework.urls', namespace='rest_framework')) settings.py REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', ) } 我想要的是 请求: POST /api/v1/login username='name' pass='pass' 响应: 200 OK "{username: 'name', 'userId': '54321'}" set-cookie: sessionid="blahblah"