4

我正在使用collective.python构建。

我有以下.pythonrc(配置export PYTHONSTARTUP=~/.pythonrc):

import readline
import rlcompleter
readline.parse_and_bind('tab: complete')

当我Python在 shell 中运行时,选项卡完成工作。当我Plone在调试模式下运行时,它不会。除非,我将我的内容粘贴.pythonrc到 Plone 调试 Python 提示符中。我在这里想念什么?

注意:粘贴我的 .pythonrc 的内容仅在我通过安装 Plone 时有效(即使用Pythonpython bootstrap.py引导 Plone 构建)。collective.python如果我在 a 中安装 Plone ,则virtualenv没有任何效果。但至少在那种情况下,缺少的功能对我来说是有意义的(即virtualenv,使制表符完成工作所需的功能可能缺少一些东西。)

4

2 回答 2

3

实例控制器使用两个命令行开关;-i用于交互模式,并-c加载 Zope 配置并设置app变量。-c开关是禁用PYTHONSTARTUP环境变量的原因。

无论如何,您都可以修改plone.recipe.zope2instance包以运行脚本。

plone.recipe.zope2instance中,找到plone/recipe/zope2instance/ctl.py文件,将do_debug()方法更改为:

def do_debug(self, arg):
    interactive_startup = ("import os;"
        "os.path.exists(os.environ.get('PYTHONSTARTUP', '')) "
        "and execfile(os.environ['PYTHONSTARTUP']); del os;"
        'import Zope2; app=Zope2.app()')
    cmdline = self.get_startup_cmd(self.options.python,
                                   interactive_startup,
                                   pyflags = '-i', )

事实上,我喜欢支持PYTHONSTARTUP这么多的想法,我已经承诺对配方进行更改,请参阅rev 536f8fc1c4

于 2012-12-12T17:22:40.593 回答
1

我愿意import user。这写着~/.pythonrc.py。注意 .py 扩展名。我已将该文件设置为我的PYTHONSTARTUP

我将粘贴该文件以备不时之需。几年前我把它拼凑在一起。不确定它是否仍然是最好的,因为我看到了关于 2006 和 python2.3 的评论。不过,它确实有效。

$ cat ~/.pythonrc.py 
# See http://blog.partecs.com/2006/02/27/source-inspector/
#import pydoc
import inspect
import rlcompleter, readline

readline.parse_and_bind('tab: complete')

# def source(obj):
#     """source of the obj."""
#     try:
#         pydoc.pipepager(inspect.getsource(obj), 'less')
#     except IOError:
#         pass

# From /usr/local/lib/python2.3/user.py
import os
home = os.curdir                        # Default
if 'HOME' in os.environ:
    home = os.environ['HOME']
elif os.name == 'posix':
    home = os.path.expanduser("~/")
# Make sure home always ends with a directory separator:
home = os.path.realpath(home) + os.sep

# From http://wiki.python.org/moin/PdbRcIdea
# Command line history:
histfile = home + '.pyhist'
try:
    readline.read_history_file(histfile)
except IOError:
    pass
import atexit
atexit.register(readline.write_history_file, histfile)
readline.set_history_length(200)

# Cleanup namespace
# del atexit
# del home
# del histfile
# del os
# del readline
# del rlcompleter
于 2012-12-12T22:45:02.703 回答