当前位置: 首页 > 知识库问答 >
问题:

使用venv时环境$PATH不同

寿飞飙
2023-03-14

我在mac (OSX小牛)上使用PyCharm运行一个简单的脚本,如下所示。它所做的只是打印< code>PATH变量。我在项目目录中有一个virtualenv。我在PyCharm中添加了一个运行配置,并用不同的Pythons进行了尝试:

# file mytest.py
import os
print "PATH: ", os.environ['PATH']

当我使用系统默认的python (/usr/bin/python)运行时,它会打印PATH的正确值(即我在。bash_profile文件),它有点长,包含许多目录。

但是当我选择venv的Python时,路径被简化为只有:/usr/bin:/bin:/usr/sbin:/sbin:/用户/myname/项目/myproj/venv/bin

如果我从终端窗口运行脚本,这不会发生。在本例中,它显示了系统的python和venv-python的正确路径。如果我停用venv并运行venv/bin/pythonmytest.py,也不会发生这种情况。

有谁知道在从PyCharm运行和使用venv时,如何使路径值设置正确?

共有3个答案

太叔弘壮
2023-03-14

我在Windows上的问题与案例有关:这是PathPATH之间的区别。

如果您选择:

    < li >编辑配置 < ul > < li >环境变量 < ul > < li >显示(右下角的下方)

这显示了环境变量。在我的系统上没有PATH,只有路径

定义一个新的< code>PATH环境变量不起作用,但是< code>Path工作正常。

卫泉
2023-03-14

我为SublimeLint构建了一些东西,可以在Python中计算出你的shell的路径。

https://github.com/lunixbochs/sublimelint/blob/st3/lint/util.py#L57

基本上,它运行$SHell--log,回显您的路径,并对其进行解析。

要点是:

import os
import subprocess

shell = os.path.basename(os.environ['SHELL'])
output = subprocess.Popen(
    (shell, '--login', '-c', 'echo __SEP__$PATH'),
    stdout=subprocess.PIPE).communicate()[0] or ''
print output.split('__SEP__', 1)[1].split(':')
晏经武
2023-03-14

您可能应该知道所有环境变量都是继承的。bash_profile中定义环境变量时,它会在终端(bash)和所有将从终端启动的进程中可用(这些进程将是bash进程的子进程)。这就是为什么在终端中运行脚本时会得到期望值。

您不是从终端启动PyCharm,因此它不会继承PATH。Python或venv也是如此(它们从PyCharm启动)。

要解决您的问题,您有3个选项:只需从终端启动PyCharm,或者将PATH变量定义从.bash_profile移动到会话初始化脚本(PATH将在系统范围内定义),或者在PyChar的运行配置中复制PATH(它在那里有这样的选项)

祝你好运!

 类似资料:
  • 我在使用pyenv创建虚拟环境时遇到了一些麻烦。 这很好: 但是,当我创建一个虚拟环境(我假设是用Python 3.6.0完成的)并激活它时,我得到的是python3.7.4。如果我使用,情况也是一样的。 用语言来说,我想创建一个虚拟环境,其版本与当前通过pyenv激活的版本相同。我在这里错过了什么? 我的系统的一些信息: 我使用的是苹果操作系统。 我通过自制安装了Python 3.7.4,它是的

  • 在OS X10.8.2上,我使用JNA和gstreamer-java(通过Eclipse IDE)加载gstreamer库。首先,我使用gstreamer.com提供的SDK安装了gstreamer。但是,我卸载了这个,并使用Macports来安装它。 SDK的lib安装到: 现在,假设我想通过某个环境变量设置java来知道这个位置。这可能吗?看起来是这样,因为运行这条线: 显示。但我一辈子都想不

  • 如何删除使用创建的虚拟环境 我可以删除目录吗? 这似乎是一个谷歌应该很容易回答的问题,但我只找到了删除用或创建的环境的答案。

  • A Zen student went up to a hot dog vendor and said: "Make me one with everything". — Joke 环境背景很重要。 如果你想对 Puppet 的配置清单在应用到生产环境之前先进行测试, 你可以使用 Puppet 的 environment 特性来做到。 这可以让你根据环境应用不同的配置清单来设置客户机。例如,你可以定

  • 问题内容: 我对使用时如何搜索可执行文件感到困惑。如果给子进程提供了绝对路径,那么它就可以工作,但是我正在尝试使用相对路径。我发现,如果设置环境变量PYTHONPATH,则可以从该路径中获取导入的模块,并且PYTHONPATH在其中,但似乎对的行为没有帮助。我也尝试编辑将PYTHONPATH添加到的文件,就像这样 并验证了在以交互方式,与ipython或通过从命令行运行脚本启动python时,PY

  • 3.1.1.设置PATH环境变量 Android SDK里有个目录,主要的工具都在里面。我们将会频繁地用到这些工具,因此把你的~/android-sdk/tools/目录加入系统的环境变量PATH会是个好办法,这一来就不需要每次使用它们时都切换目录了。 不同系统设置环境变量的方式各有不同,详见Installing Android SDK页面中的第二步。 (译注:Installing Android