求教大家 pycharm 中,环境变量 path 的问题! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
brq417059
V2EX    Python

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

  •  1
     
  •   brq417059 2017-04-15 17:10:35 +08:00 14309 次点击
    这是一个创建于 3158 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题的发现

    在 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 的偏好设置里没有找到环境变量相关设置。

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


    看 pycharm 隶属的进程树分析下就能看出原因了
    frinstioAKL
        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 中设置了一下就好了,我也很迷,感觉莫名其妙
    rogerchen
        4
    rogerchen  
       2017-04-15 21:51:24 +08:00 via Android
    每一个 run 都可以单独设置环境变量啊
    nicevar
        5
    nicevar  
       2017-04-16 14:18:09 +08:00
    看到 Cellar 楼主用的应该是 mac ,我觉得这个坑的罪魁祸首不是 pycharm ,应该是你自己,我估计是你某个地方配置造成的,可以做简单的测试,.bash_profile 最简化及切换 pycharm 的 Project Interpreter 进行测试
    brq417059
        6
    brq417059  
    OP
       2017-04-17 00:11:18 +08:00
    @nicevar 在 youtrack 上发帖子时候,提示有相似问题的帖子。然后就找到了 https://youtrack.jetbrains.com/issue/PY-17816

    的确是 pycharm 的问题。不知道啥时候能修复
    ChineseOldSober
        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,你自己指定就可以了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2539 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    UTC 11:17 PVG 19:17 LAX 03:17 JFK 06:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86