Jak*_*ake 11 python bash terminal
对于那些不熟悉〜/ .bashrc的人来说,它是一个可自定义的脚本,存在于Unix shell中Bash.当新的终端会话开始时,将运行此特定于用户的文件.用户可以在此文件中编写常用变量,函数和环境设置的脚本,从而在打开终端窗口时自动加载它们.
Python有类似的东西吗?本质上我想在脚本中定义一些全局Python函数,并确保每当我在我的机器上运行Python脚本时,或者每当我启动Python终端时它们都被加载.我想知道这种行为是否已经存在,或者是否有一种直接的方式来实现它.
这是一个坏主意 - 不要这样做.真.(名称空间污染是一个严重的问题,通过编写仅适用于您自己的机器而不是其他地方的代码,您无需任何帮助;相反,如果您将代码打包在模块中,则可以正确地发布和分发它.
但是,如果您坚持,请参阅站点模块,特别是其用户自定义行为:
在此之后,尝试导入名为的模块
usercustomize,如果ENABLE_USER_SITE为true ,则可以执行任意特定于用户的自定义.此文件旨在在用户site-packages目录中创建(见下文),sys.path除非被禁用,否则该目录是其中一部分-s.一个ImportError将被忽略.
因此,您可以创建一个usercustomize模块,根据您的心脏内容进行热补丁.
作为此类热修补的示例:
def myfunc():
print 'hello'
main_ns = __import__('__main__')
main_ns.myfunc = myfunc
Run Code Online (Sandbox Code Playgroud)
为每个Python脚本运行都不是一个好主意,因为它打破了命名空间; 每个Python的禅:
命名空间是一个很棒的主意 - 让我们做更多的事情吧!
也就是说,__init__.py可以用来确保在导入包或其子代的情况下运行某些代码,并且为了自定义交互式解释器,将PYTHONSTARTUP环境变量设置为指向一个文件,使用Python命令在交付到交互式解释器之前运行,例如export PYTHONSTARTUP=$HOME/.pythonrc.
只要确保该PYTHONSTARTUP文件包含Py2和Py3的合法语法,因为没有PYTHON3STARTUP,它将针对两个版本的Python运行.
本质上,我想在脚本中定义一些全局 Python 函数,并确保在我的机器上运行 Python 脚本或启动 Python 终端时加载它们
让我们谈谈你的第二个选择。当您启动终端时,有多种方法可以加载函数和变量。我建议使用IPython而不是默认的 Python 终端。但是,要在不安装 IPython 的情况下执行此操作,请修改环境变量 PYTHONSTARTUP。您确实失去了划分配置文件的能力。
安装 IPython 后,您需要初始化其配置文件。要创建默认配置文件:
ipython profile create
Run Code Online (Sandbox Code Playgroud)
为了解决其他答案中的常见主题,全局变量和函数是一个坏主意,特别是如果它们是隐式定义的。但是,您可以在启动 ipython 时定义和加载单独的配置文件。要创建这样的配置文件:
ipython profile create <name>
Run Code Online (Sandbox Code Playgroud)
要加载<name>配置文件:
ipython --profile=<name>
Run Code Online (Sandbox Code Playgroud)
现在修改配置文件。运行此命令以查看它们的位置:
ipython locate profile
Run Code Online (Sandbox Code Playgroud)
你应该找到ipython_config.py. 我建议阅读它,它有非常有用的评论。
但要切入正题,您可以在启动 ipython 时通过将这些行添加到配置文件中来加载任意函数和变量:
c.InteractiveShellApp.exec_lines = [ "def p(s): print s" ]
c.InteractiveShellApp.exec_files = [ "/path/of/script.py" ]
Run Code Online (Sandbox Code Playgroud)
我参考了 IPython 文档和以下评论ipython_config.py:
96 # List of files to run at IPython startup.
97 # c.TerminalIPythonApp.exec_files = []
98
99 # lines of code to run at IPython startup.
100 # c.TerminalIPythonApp.exec_lines = []
Run Code Online (Sandbox Code Playgroud)