为什么远程部署路径中的$ PATH与远程系统中的$ PATH不同?

时间:2018-08-25 01:57:40

标签: python linux pycharm anaconda

我目前正在使用远程python解释器(miniconda3 / bin / python)开发Pycharm。

因此,当我在远程服务器中键入echo $PATH时,它将打印 /home/woosung/bin:/home/woosung/.local/bin:/home/woosung/miniconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

我在Pycharm中创建了一个项目,并将远程python解释器设置为miniconda3 python,当我只运行一些*.py文件时,它工作得很好。

但是当我键入一些os.system()行时,发生了奇怪的事情。
例如,在Pycharm项目的test.py

import os

os.system('echo $PATH')
os.system('python --version')

输出为

ssh://woosung@xxx.xxx.xxx.xxx:xx/home/woosung/miniconda3/bin/python -u /tmp/pycharm_project_203/test.py
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Python 2.7.12

Process finished with exit code 0

我在远程服务器上尝试了相同的命令,

woosung@test-pc:~$ echo $PATH
/home/woosung/bin:/home/woosung/.local/bin:/home/woosung/miniconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
woosung@test-pc:~$ python --version
Python 3.6.6 :: Anaconda, Inc.

PATH和python版本完全不同!我该如何解决?

我已经尝试将os.system('export PATH="$PATH:$HOME/miniconda3/bin"')添加到test.py。但是它仍然给出相同的$PATH。(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

编辑

由于@Dietrich Epp的注释,我成功地将解释器路径添加到外壳$ PATH中。 (os.environ["PATH"] += ":/home/woosung/miniconda3/bin"
但我坚持了更基本的问题。当我添加路径并执行命令时,某些*.py文件(包括仅位于miniconda3中的import库)将由外壳提供ImportError

例如,在test.py

import matplotlib

os.environ["PATH"] += ":/home/woosung/miniconda3/bin"
os.system("python import_test.py")

import_test.py

import matplotlib

当我运行test.py时,

Traceback (most recent call last):
  File "import_test.py", line 1, in <module>
    import matplotlib
ImportError: No module named matplotlib

看起来shell不了解如何使用修改后的$ PATH。

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。
它不是直接的,但非常简单。
我将os.system("python import_test.py")更改为os.system(sys.executable + ' import_test.py')

这使外壳程序使用Pycharm远程解释器(miniconda3),而不是原始的。