我希望能够在我的setup.py中添加一个钩子,它将在安装后运行(当easy_install'ing或者在进行python setup.py安装时).
在我的项目PySmell中,我有一些Vim和Emacs的支持文件.当用户以通常的方式安装PySmell时,这些文件将被复制到实际的egg中,并且用户必须将它们删除并将它们放在他的.vim或.emacs目录中.我想要的是询问用户,安装后,他希望复制这些文件的位置,甚至只是打印文件位置的消息以及他应该如何处理它们.
做这个的最好方式是什么?
谢谢
我的setup.py看起来像这样:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from setuptools import setup
version = __import__('pysmell.pysmell').pysmell.__version__
setup(
name='pysmell',
version = version,
description = 'An autocompletion library for Python',
author = 'Orestis Markou',
author_email = 'orestis@orestis.gr',
packages = ['pysmell'],
entry_points = {
'console_scripts': [ 'pysmell = pysmell.pysmell:main' ]
},
data_files = [
('vim', ['pysmell.vim']),
('emacs', ['pysmell.el']),
],
include_package_data = True,
keywords = 'vim autocomplete',
url = 'http://code.google.com/p/pysmell',
long_description =
"""\
PySmell is a python IDE …
Run Code Online (Sandbox Code Playgroud) 我想显示内部CoreAnimation层字符串,但不幸的是CATextLayer是不够的,主要是因为它很难使用约束时使用,并要自动换行.
我正在使用NSLayoutManager,使用以下代码(PyObjC):
NSGraphicsContext.saveGraphicsState()
# THIS SOLVES THIS ISSUE
CGContextSetShouldSmoothFonts(ctx, False)
graphics = NSGraphicsContext.graphicsContextWithGraphicsPort_flipped_(ctx, True)
NSGraphicsContext.setCurrentContext_(graphics)
height = size.height
xform = NSAffineTransform.transform();
xform.translateXBy_yBy_(0.0, height)
xform.scaleXBy_yBy_(1.0, -1.0)
xform.concat()
self.textContainer.setContainerSize_(size)
glyphRange = self.layoutManager.glyphRangeForTextContainer_(self.textContainer)
self.layoutManager.drawBackgroundForGlyphRange_atPoint_(glyphRange, topLeft)
self.layoutManager.drawGlyphsForGlyphRange_atPoint_(glyphRange, topLeft)
NSGraphicsContext.restoreGraphicsState()
Run Code Online (Sandbox Code Playgroud)
这一切都很好并且有效,但唯一的问题是它会产生看起来很糟糕的文本(虽然它是防腐蚀的).
这是CATextLayer版本:http://i39.tinypic.com/23h0h1d.png
这是NSLayoutManager版本:http://i40.tinypic.com/2vv9rw5.png
我缺少什么?
这将是一个普遍的问题.
我正在努力设计GUI应用程序,尤其是.处理不同部分之间的相互作用.
我不知道应该如何处理共享状态.一方面,共享状态很糟糕,事情应该尽可能明确.另一方面,没有共享状态会在组件之间引入不需要的耦合.
一个例子:
我希望我的应用程序可以通过脚本以Emacs/Vim的方式扩展.显然,需要修改某种共享状态,以便GUI使用它.我最初的计划是有一个可以从任何地方访问的全球"会话",但我不太确定.
一个棘手的用例是键绑定.我希望用户能够从脚本中指定自定义键绑定.每个键绑定映射到一个任意命令,该命令接收会话作为唯一参数.
现在,编辑器组件捕获了按键.它必须能够访问每个会话的键映射,因此需要访问会话.将编辑器与会话结合起来是一个好主意吗?其他组件也需要访问键绑定,因此会话现在变为共享,可以是单个...
关于设计超出MVC的GUI应用程序有什么好的阅读吗?
这是Python和wxPython,FWIW.
[编辑]:添加了具体的用例.
python architecture model-view-controller user-interface wxpython