求教pycharm当中环境变量path为啥和shell中的不一样?
0
问题的发现
在pycharm里把一个编译好的二进制文件放到/usr/local/bin/,然后在程序里调用。
报如下的错,前提是/usr/local/bin/已经在环境变量PATH里。
最简单的解决办法就是把上述命令改为:
但是仍然想知道原因。
问题分析
这是用print(os.environ)在pycharm里打印出来的信息(pycharm里用的pyenv创建的虚拟环境)
打印出所有的环境变量(包括各种和python无关的)。这里面的PATH和在shell里执行echo $PATH得到的结果不一样,头尾都加上了当前虚拟环境的路径(为啥要加两次?可能是pyenv的手段),另外中间去掉了很多环境值,包括这次踩到的坑/usr/local/bin
为了探索原因,我在shell里先进pycharm里使用的同一个python虚拟环境,再打印值:
打印出来的命令依然是经过一些添加的命令,但是基本涵盖真实PATH中的值。
这样来看是不是意味着:虽然python本身会根据当前环境修改出自身(python shell)的变量,但是我这个坑的罪魁祸首是pycharm呢?pycharm的偏好设置里没有找到环境变量相关设置。
在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的偏好设置里没有找到环境变量相关设置。
没有找到相关结果
重要提示:提问者不能发表回复,可以通过评论与回答者沟通,沟通后可以通过编辑功能完善问题描述,以便后续其他人能够更容易理解问题.
0 个回复