我想使用Spyder设置我的.bashrc
环境变量;换句话说,我正在寻找一个Python命令来读取我的.bashrc
。您有任何想法吗?
我想使用Spyder设置我的.bashrc
环境变量;换句话说,我正在寻找一个Python命令来读取我的.bashrc
。您有任何想法吗?
.bashrc
应该在登录时自动加载到环境中。
import os
print os.environ
如果你想从bash源文件创建一个值的字典,理论上你可以这样做:
output = subprocess.check_output("source /path/to/.bashrc;env")
env = dict(line.split("=") for line in output.splitlines() if "=" in line))
print env
print os.environ['PATH']
时,它返回的是/Applications/Spyder.app/Contents/Resources:/usr/bin:/bin:/usr/sbin:/sbin:
,而不是我在.bashrc
中定义的内容(我使用的是Mac)。问题应该是出在Spyder本身。 - ChrisBos.environ
时,对于_PYTHON_PATH_,我得到了_'PYTHONPATH': '/Applications/Spyder-Py2.app/Contents/Resources'。当我在终端中执行echo $PYTHONPATH
时,我得到了 /Applications/Spyder-Py2.app/Contents/Resources:/Applications/Trelis-15.0.app/Contents/MacOS_,这正是我想要的。那么为什么Spyder中的PYTHONPATH没有被我的.bashrc PYTHONPATH覆盖呢? - ChrisB.profile
,我很确定如果他们是指的.bash_profile
,那么它会被说成.bash_profile
...不过我可能错了 - Joran Beasley.profile
文件,然后删除你的.bash_profile
...如果Spyder实际上正在覆盖你的Python路径,那肯定是一个错误,应该将其发送给制作Spyder的人。 - Joran BeasleyShell的启动文件是Shell的启动文件。您真的希望将事物解耦,以便Python不必理解Bash语法,并且从Python中使用的设置不会隐藏在不同实用程序的单块启动文件中。
解决此问题的一种方法是将环境变量放在单独的文件中,并从您的.bashrc
中source
该文件。然后,当您从Python调用shell时,如果需要,该代码可以source
相同的文件。
# .bashrc
source $HOME/lib/settings.sh
# Python >=3.5+ code
import subprocess
subprocess.run(
'source $HOME/lib/settings.sh; exec the command you actually want to run',
# Need a shell; need the shell to be Bash
shell=True, executable='/bin/bash',
# basic hygiene
check=True, universal_newlines=True)
(如果您需要与旧版Python兼容,请尝试使用subprocess.check_call()
,甚至可以放弃check_
变体的保障,而选择使用subprocess.call()
以实现与Python 2.4完全兼容。)
.bashrc
只是一个文件,您可以使用标准调用读取/写入它。 - tzamanos.environ
。 - jme