Python 有一个启动文件!
封面照片由 Uriel Soberanes 在 Unsplash 上拍摄
所以,我想澄清一下。我使用 Python 的时候就知道它有一个启动自定义文件。我不是这周才发现的。我的意思是,Python 当然有启动文件。所有东西都有启动文件!我只是想确保你知道这个。(开个玩笑,我之前根本不知道有这个东西。)
在你提起之前,我已经知道bPython了,它是一款非常棒的 Python 解释器替代品,拥有语法高亮、制表符补全、自动缩进等功能,简直完美。我一直在用它。但这篇博文的主题不是这个。附言:如果你还不了解 bPython,我强烈推荐它(Windows 用户的情况可能有所不同)。
$PYTHONSTARTUP
如果您将环境变量$PYTHONSTARTUP
设置为有效的 Python 文件,则该文件将在启动 Python 解释器时运行。
$ export PYTHONSTARTUP="~/.config/pythonrc.py"
不用担心文件名。随便你怎么命名!python_startup.py
或者直接写成pythonrc
。你也可以把它放在任何你想要的目录中。只要确保你的$PYTHONSTARTUP
环境变量匹配即可。然后,你就可以把任何你想要的内容放进这个文件了。
# ~/.config/pythonrc.py
a = "Wahoo!"
print("Soup")
try:
import numpy as np
except ImportError:
print("Could not import numpy.")
尝试运行你的 Python 解释器。
$ python # or python3
您应该会看到类似以下内容的内容:
Python 3.7.0 (default, Jun 29 2018, 20:14:27)
[Clang 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Soup
>>> np
<module 'numpy' from '/usr/local/lib/python3.7/site-packages/numpy/__init__.py'>
>>> np.zeros((3, 2))
array([[0., 0.],
[0., 0.],
[0., 0.]])
>>> a
'Wahoo!'
您可以导入常用的库,为自己创建变量等等。
sys.ps1 和 sys.ps2
一个巧妙的做法是设置sys.ps1
和sys.ps2
变量,它们控制你的 Python 提示。
# ~/.config/pythonrc.py
import sys
sys.ps1 = "🌮"
sys.ps2 = "💩"
# ...
回到交互式 REPL:
🌮 for i in range(10):
💩 print("I am a mature adult.")
💩
I am a mature adult.
I am a mature adult.
...
事实上,你甚至可以将sys.ps1
and设置sys.ps2
为非字符串的对象!如果它们不是字符串,Python 就会调用str(obj)
它们。
# ~/.config/pythonrc.py
import sys
from datetime import datetime
class CustomPS1:
def __init__(self):
self.count = 0
def __str__(self):
self.count += 1
return f"({self.count}) {datetime.now().strftime('%H:%m %p')} > "
sys.ps1 = CustomPS1()
在解释器中:
(1) 10:06 AM > for i in range(10):
... print("Am I cool now?")
...
Am I cool now?
Am I cool now?
# ...
(2) 11:06 AM >
-i 标志
除了这些新的超能力之外,您还可以暂时将任何Python 脚本设置为启动脚本。这对于某些交互式调试非常有用。假设您正在开发一个项目,并且有一个定义了一些函数的脚本:
# cool_script.py
def what_time_is_it():
return "Party Time"
您可以-i
在运行 Python 解释器时使用该标志cool_script.py
作为启动文件,而不是通常的文件。
$ python -i cool_script.py
>>> what_time_is_it()
'Party Time'
如果你用启动文件做了一些很酷的事情,请分享给我!我很想知道!祝你编程愉快!
最初发布于assert_not magic?