首页 > 解决方案 > 为什么远程部署路径中的 $PATH 与远程系统中的 $PATH 不同?

问题描述

我目前正在使用远程 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(),发生了奇怪的事情。
例如,test.py来自 Pycharm 项目

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 的评论,我成功地将解释器路径添加到shell $PATH。( os.environ["PATH"] += ":/home/woosung/miniconda3/bin")
但我遇到了更基本的问题。当我添加路径并执行命令时,一些*.py文件包括import仅在 miniconda3 中的库,shell 给出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。

标签: pythonlinuxpycharmanaconda

解决方案


我找到了解决方案。
这不是直接的,但很简单。
os.system("python import_test.py")改为os.system(sys.executable + ' import_test.py').

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


推荐阅读