求教大家 pycharm 中,环境变量 path 的问题!

2017-04-15 17:10:35 +08:00
 brq417059

问题的发现

在 pycharm 里把一个编译好的二进制文件放到/usr/local/bin/,然后在程序里调用。

cmmd = "xxx ..."
os.system(cmmd)

报这样的错,但是/usr/local/bin/已经在环境变量 path 里。

sh: xxx: command not found

最简单的解决办法就是把上述命令改为:

cmmd = "/usr/local/bin/xxx ..."

但是仍然想知道原因。

问题分析

这是用print(os.environ)在 pycharm 里打印出来的信息( pycharm 里用的 pyenv 创建的虚拟环境)

environ({......, 'PATH': '/Users/xxx/.pyenv/versions/3.6.0/envs/test-3.6.0/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/baoruiqi/.pyenv/versions/test-3.6.0/bin', 'PYENV_SHELL': 'fish', ......})

打印出几乎是所有的环境变量(包括各种和 python 无关的)。这里的 PATH 和在 shell 里执行echo $PATH得到的结果不一样,头尾都加上了当前虚拟环境的路径(为啥要加两次?可能是 pyenv 的手段),另外中间去掉了很多环境值,包括这次踩到的坑/usr/local/bin

为了探索原因,我在 shell 里先进 pycharm 里使用的同一个 python 虚拟环境,再打印值:

$ pyenv activate test-3.6.0
(test-3.6.0) $ python
>>> import os
>>> os.environ
environ({......, 'PATH': '/Users/baoruiqi/.pyenv/versions/test-3.6.0/bin:/usr/local/Cellar/pyenv/1.0.10/libexec:/usr/local/Cellar/pyenv-virtualenv/1.0.0/shims:/Users/baoruiqi/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', .......})

打印出来的命令依然是经过一些添加的命令,但是基本涵盖真实 PATH 中的值

这样来看是不是意味着:虽然 python 本身会根据当前环境修改出自身( python shell )的变量,但是我这个坑的罪魁祸首是 pycharm 呢?但是 pycharm 的偏好设置里没有找到环境变量相关设置。

13572 次点击
所在节点    Python
7 条回复
brq417059
2017-04-15 18:13:36 +08:00
吃了个饭回来,自己顶一下
zsz
2017-04-15 19:29:00 +08:00
pycharm 的进程是桌面环境的子进程,终端启动的时候才会读取 .bashrc ,你的环境变量不是配置在系统级别,所以 pycharm 看不到这个环境变量


看 pycharm 隶属的进程树分析下就能看出原因了
frinstioAKL
2017-04-15 20:04:16 +08:00
没细看你的帖子,说一下 pycharm 改环境变量的地方,最近折腾远程 ssh 调用 GPU 跑深度学习这一块,倒腾了好久。也许对你有帮助
1. Preference -> Build, Execution, Deployment -> Console -> Python Console 下最上面可设置环境变量
2. 任务栏顶部的 Run -> Edit Configurations 里面有个 Environment Variables
首先我在 1 中设置了远端 GPU 服务器的环境变量,点击 run 后居然提示 cuDNN 打不开, LD_LIBRARY_PATH 环境变量不对,但是用 os.environ 打印出来发现并没有问题。后来在 2 中设置了一下就好了,我也很迷,感觉莫名其妙
rogerchen
2017-04-15 21:51:24 +08:00
每一个 run 都可以单独设置环境变量啊
nicevar
2017-04-16 14:18:09 +08:00
看到 Cellar 楼主用的应该是 mac ,我觉得这个坑的罪魁祸首不是 pycharm ,应该是你自己,我估计是你某个地方配置造成的,可以做简单的测试,.bash_profile 最简化及切换 pycharm 的 Project Interpreter 进行测试
brq417059
2017-04-17 00:11:18 +08:00
@nicevar 在 youtrack 上发帖子时候,提示有相似问题的帖子。然后就找到了 https://youtrack.jetbrains.com/issue/PY-17816

的确是 pycharm 的问题。不知道啥时候能修复
ChineseOldSober
2021-04-01 22:26:50 +08:00
今天遇到此问题了,写下回答留给未来浏览的网友去看。
粗暴解法:只需要带着指令的详细路径运行就可以了。
例如你的命令是 java xxx,那么你就先去 bash 里手查一下 java 的详细路径,
查一下:whereis java,比如得到了 /usr/local/jdk-11.0.7/bin/java
然后你就把 cmd 改成 ”/usr/local/jdk-11.0.7/bin/java xxxx"就可以了。根本原因是 pycharm 运行时候不读 bashrc 环境变量,就找不到 java,你自己指定就可以了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355101

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX