如何让Plone读取我的pythonrc?

时间:2012-12-12 12:23:43

标签: python plone readline

我正在使用collective.python buildout。

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

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

当我在shell中运行Python时,标签完成工作。当我在调试模式下运行Plone时它没有。除非,我将.pythonrc的内容粘贴到Plone调试Python提示符中。我在这里缺少什么?

注意:只有通过python bootstrap.py安装Plone(即使用collective.python Python引导Plone buildout)时,粘贴我的.pythonrc的内容才有效。如果我在virtualenv内安装Plone,则无效。但至少在那种情况下,缺少的功能对我来说是有意义的(即,virtualenv可能缺少使标签完成工作所需的功能。)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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