Python相当于〜/ .bashrc

时间:2016-01-30 05:24:14

标签: python bash terminal

对于那些不熟悉~/.bashrc的人,它是Unix shell Bash的可自定义脚本。当新的终端会话开始时,将运行此特定于用户的文件。用户可以编写此文件中的常用变量,函数和环境设置的脚本,从而在打开终端窗口时自动加载它们。

Python有类似的东西吗?本质上我想在脚本中定义一些全局Python函数,并确保每当我在我的机器上运行Python脚本时,或者每当我启动Python终端时它们都被加载。我想知道这种行为是否已经存在,或者是否有直接的方式来实现它。

3 个答案:

答案 0 :(得分:5)

这是一个坏主意 - 不要这样做。真。 (名称空间污染是一个严重的问题,通过编写仅适用于您自己的机器而不是其他地方的代码,您无需任何帮助;相反,如果您将代码打包在模块中,则可以正确地发布和分发它。

但是,如果您坚持,请参阅the site module,特别是其用户自定义行为:

  

在此之后,尝试导入名为usercustomize的模块,如果ENABLE_USER_SITE为真,则可以执行任意特定于用户的自定义。此文件旨在在用户site-packages目录中创建(见下文),该目录是sys.path的一部分,除非-s禁用。 ImportError将被默默忽略。

因此,您可以创建一个usercustomize模块,用于热补心内容。

作为此类热点的一个例子:

def myfunc():
  print 'hello'

main_ns = __import__('__main__')
main_ns.myfunc = myfunc

答案 1 :(得分:5)

为每个Python脚本运行都不是一个好主意,因为它打破了命名空间;每Zen of Python

  

命名空间是一个很棒的主意 - 让我们做更多的事情吧!

也就是说,__init__.py可用于确保在导入包或其子代时运行某些代码,并且为了自定义交互式解释器,将PYTHONSTARTUP环境变量设置为指向文件使用Python命令在交付到交互式解释器之前运行,例如export PYTHONSTARTUP=$HOME/.pythonrc

确保PYTHONSTARTUP文件包含Py2和Py3的合法语法,因为没有PYTHON3STARTUP,它将针对两个版本的Python运行。

答案 2 :(得分:4)

  

基本上我想在脚本中定义一些全局Python函数,并确保每当我在我的脚本上运行python脚本时它们都被加载   机器,或者每当我启动Python终端时

让我们谈谈你的第二个选择。启动终端时,有多种方法可以加载函数和变量。我建议使用 IPython 而不是默认的Python终端。但是,要在不安装IPython的情况下执行此操作,请修改环境变量 PYTHONSTARTUP.您确实无法划分配置文件。

安装IPython后,您需要初始化其配置文件。 要创建默认配置文件:

ipython profile create 

为了解决其他答案中的共同主题,全局变量和函数是一个坏主意,特别是如果它们是隐式定义的。但是,您可以在启动ipython时定义和加载单独的配置文件。 要创建这样的个人资料:

ipython profile create <name>

加载<name>个人资料:

ipython --profile=<name>

现在修改配置文件。运行此命令以查看它们的位置:

ipython locate profile

你应该找到ipython_config.py。我建议阅读它,它有非常有用的评论。

但是要说明一点,你可以在启动ipython时加载任意函数和变量,方法是将这些行添加到配置文件中:

c.InteractiveShellApp.exec_lines = [ "def p(s): print s" ]
c.InteractiveShellApp.exec_files = [ "/path/of/script.py" ] 

我引用了the IPython docs以及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 = []