在 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 的偏好设置里没有找到环境变量相关设置。
1
brq417059 OP 吃了个饭回来,自己顶一下
|
2
zsz 2017-04-15 19:29:00 +08:00 via iPhone
pycharm 的进程是桌面环境的子进程,终端启动的时候才会读取 .bashrc ,你的环境变量不是配置在系统级别,所以 pycharm 看不到这个环境变量
看 pycharm 隶属的进程树分析下就能看出原因了 |
3
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 中设置了一下就好了,我也很迷,感觉莫名其妙 |
4
rogerchen 2017-04-15 21:51:24 +08:00 via Android
每一个 run 都可以单独设置环境变量啊
|
5
nicevar 2017-04-16 14:18:09 +08:00
看到 Cellar 楼主用的应该是 mac ,我觉得这个坑的罪魁祸首不是 pycharm ,应该是你自己,我估计是你某个地方配置造成的,可以做简单的测试,.bash_profile 最简化及切换 pycharm 的 Project Interpreter 进行测试
|
6
brq417059 OP @nicevar 在 youtrack 上发帖子时候,提示有相似问题的帖子。然后就找到了 https://youtrack.jetbrains.com/issue/PY-17816
的确是 pycharm 的问题。不知道啥时候能修复 |
7
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,你自己指定就可以了。 |