最近安装了一些软件,需要python来操作。由于某种原因,它安装了自己的Python版本,并修改了PYTHONPATH变量。现在,当我尝试导入 numpy 等模块时,我得到的只是
ImportError: No module named numpy
目前,运行echo $PYTHONPATH
I get /home/astrolab/easyaccess/eups/1.2.30/python
,它指向篡夺的 python 安装。我通过运行得到了相同的结果sudo echo $PYTHONPATH
。检查 sys.path 设置,我得到
['', '/home/astrolab/easyaccess/eups/1.2.30/python', '/home/astrolab/easyaccess/eups/packages/Linux64/python/2.7.6+2/lib/python27.zip', '/home/astrolab/easyaccess/eups/packages/Linux64/python/2.7.6+2/lib/python2.7', '/home/astrolab/easyaccess/eups/packages/Linux64/python/2.7.6+2/lib/python2.7/plat-linux2', '/home/astrolab/easyaccess/eups/packages/Linux64/python/2.7.6+2/lib/python2.7/lib-tk', '/home/astrolab/easyaccess/eups/packages/Linux64/python/2.7.6+2/lib/python2.7/lib-old', '/home/astrolab/easyaccess/eups/packages/Linux64/python/2.7.6+2/lib/python2.7/lib-dynload', '/home/astrolab/.local/lib/python2.7/site-packages', '/home/astrolab/easyaccess/eups/packages/Linux64/python/2.7.6+2/lib/python2.7/site-packages']
但是,如果我跑步sudo python -c "import sys; print sys.path"
我会得到
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/astrolab/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7']
这是正确的路径,我可以像平常一样导入 numpy/matplotlib/etc 。
我的问题是:修复 sys.path/PYTHONPATH 环境变量的最佳方法是什么?我考虑过编辑 .bashrc 文件并从 sudo 的 sys.path 手动导出路径,但这真的是解决此问题的最佳方法吗?我也不清楚以这种方式编辑 $PYTHONPATH 是否可以修复 sys.path 差异。
编辑:我忘记包括的一件事是我不再需要访问新 python 安装的任何部分。一旦我解决了这个问题,我计划删除新安装+相关软件。
答案1
检查 .rc 文件中添加的 PYTHONPATH env 设置并将其注释掉 - 这应该会让您没有 PYTHONPATH env 设置,这意味着系统的默认设置(您使用 sudo cmd 进行了验证)。也可能正确地对该软件包进行 PATH 自定义。您需要重新启动会话(或手动调整它们的环境变量)。
如果您仍然需要使用该 sw 包的自定义,请将它们放入一个特殊的文件/脚本中(甚至可能也包装 sw 调用) - 这样您仍然可以自定义 env 以使该 sw 满意,但您只需这样做如果/当你需要运行该软件时。