【问题标题】:Different environment variables loaded into the terminal and Pycharm加载到终端和 Pycharm 中的不同环境变量
【发布时间】:2021-05-12 09:22:32
【问题描述】:

我想使用 Python 从它的 bash 命令调用一个应用程序。我将应用程序的路径添加到 PATH 环境变量中,以便在终端中工作。 但是,在 Pycharm 中执行此操作时,它不起作用。我发现,那是因为当我在 Pycharm 中调用应用程序时,显然环境变量并没有全部加载。

这就是我在终端中所做的:

(save) philipp@philipp-Blade-15-Advanced-Model-Early-2020:~$ python
Python 3.8.2 (default, Mar 25 2020, 17:03:02) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ["PATH"]
'/home/philipp/anaconda3/envs/save/bin:/home/philipp/anaconda3/condabin:/home/philipp/sumo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'

当我在 Pycharm 中运行相同的命令时,我得到以下输出:

'/home/philipp/anaconda3/envs/save/bin:/home/philipp/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'

Pycharm 的输出丢失了/home/philipp/sumo/bin,这是我安装应用程序的地方,也是我需要调用它的地方。我对此进行了很多研究,但无法弄清楚问题是什么......我在两种情况下都使用相同的 Anaconda 环境。能指出问题吗?

【问题讨论】:

  • 前两个目录似乎是您的虚拟环境添加的,而/home/philipp/sumo/bin 是您的shell配置文件添加的。 PyCharm 没有由您的登录 shell 启动,因此不会继承包含 sumo/bin 的路径。
  • @chepner 是的,我在 .bashrc 文件中将/home/philipp/sumo/bin 添加到PATH。你能告诉我,我如何使用终端在 PyCharm 中使用的相同 shell?另外,在 Windows 中这是默认工作的,我只在 Linux 中遇到过这个问题。
  • 这个答案 (stackoverflow.com/questions/27553576/…) 说,.bashrc 在登录时被加载到os.environ。显然这不可能是真的。
  • 或多或少,.bashrc 是在您的 shell 启动时获取的。但是 PyCharm 没有你的 shell 作为父级;它基本上是由另一个进程你执行的,所以它不会从你的登录shell继承。
  • @chepner 好的,谢谢。那么当 PyCharm 启动一个新的 shell 时,如何从 bashrc 中插入环境变量呢?还有一个平台无关的方法吗?你能写一个答案,这样我就可以投票了吗?

标签: python bash environment-variables


【解决方案1】:

你的东西对我有用。 我所做的是:

  1. 我在最后一行使用 export PATH=/THIS/IS/TEST/PATH:$PATH 编辑了我的 .bashrc。
  2. 退出终端并创建一个新的终端来刷新我的实例。
  3. 使用echo $PATH检查路径是否正确加载了/THIS/IS/TEST/PATH
  4. 使用charm 命令从当前终端打开pycharm。
  5. 复制+粘贴您的代码
import os
print(os.environ["PATH"])
  1. 检查打印输出,发现/THIS/IS/TEST/PATH

我从单个终端运行并使用 anaconda

你是从终端运行 pycharm 吗?


(替代方案)

如果它仍然对您不起作用,为什么不创建一个包含 PATH 变量并在调用 ~/.bashrc 时刷新的 txt 文件。

例如,

  1. ~/.bashrc 文件的最后一行:
echo "$PATH" > ~/bash_path.txt
  1. 然后将内容作为变量读取到您的 Python 代码中
PATH = open('/absolute/path/to/bash_path.txt', 'r').read()
print(PATH)

它应该具有与os.environ 命令相同的输出。

【讨论】:

  • 第一个解决方案对我有用。我不知道从终端运行 PyCharm 是可能的,那会从 .bashrc 初始化 PATH 环境变量。我还发现,可以输入环境变量,然后 PyCharm 在启动时使用(见这里stackoverflow.com/questions/42708389/…
  • 很高兴知道!我认为第二种解决方案可以与您建议的 pycharm 环境设置一起使用。从我从您发送的链接中看到,它仍然需要一个 env 文件(这是第二个解决方案创建的)。
猜你喜欢
  • 2016-09-05
  • 2021-09-18
  • 2018-08-02
  • 1970-01-01
  • 2014-12-18
  • 2022-08-12
  • 2020-05-20
  • 1970-01-01
  • 2020-06-07
相关资源
最近更新 更多