更改pythonpath的优先级

更改pythonpath的优先级,python,python-2.7,vtk,paraview,pygments,Python,Python 2.7,Vtk,Paraview,Pygments,当我加载某些模块[即pygments.lexers Bash Lexer和pygments.formatters LatexFormatter]时,我遇到了一个错误,python找不到这些模块。然后我意识到这个问题是由我的PYTHONPATH引起的,它是为与python一起使用而设置的。它带来了自己版本的pygments,由于某种原因,它不能与jupyter笔记本上的nbconvert一起工作[注意,它并不是完全不起作用,正如PythonLexer,还有一些其他的被称为没有问题,只是我上面提到的

当我加载某些模块[即pygments.lexers Bash Lexer和pygments.formatters LatexFormatter]时,我遇到了一个错误,python找不到这些模块。然后我意识到这个问题是由我的PYTHONPATH引起的,它是为与python一起使用而设置的。它带来了自己版本的pygments,由于某种原因,它不能与jupyter笔记本上的nbconvert一起工作[注意,它并不是完全不起作用,正如PythonLexer,还有一些其他的被称为没有问题,只是我上面提到的那些没有被找到]

我对mayavi也有类似的问题,它不适用于paraview版本的vtk

通过在bashrc中注释掉python路径,这两个问题都可以很简单地解决,但显然paraview将无法工作

例如,有没有办法降低PYTHONPATH的优先级,以便/etc中的系统代码。。。优先调用,但paraview仍然可以在PYTHONPATH中找到它需要的


我在LinuxMint17.3上使用Python2.76,paraview是4.4.0版,根据

从源代码安装。是的,您可以
导入sys
并在运行时将
sys.path
作为普通列表进行操作。您可以重新排列其中的内容,或者只在开头插入(
sys.path.insert(0,'path')
)。在您的
import
语句之前执行此操作。如果这会在其他地方引起问题,请将其放回您的
import
语句之后

注意,这是相当粗糙的。虽然我没有一起研究过这些特定的工具,但听起来你可能有理由这么做

编辑:如果您希望在一次python执行过程中在单个导入级别控制python路径,则这一点更为重要。如果希望在Python的一次完整执行级别控制路径,还可以在命令行上为该执行设置Python路径,如下所示:

PYTHONPATH=/replacement/path/here python your_script.py

这比仅仅调用python更冗长(除非用shell脚本或别名包装),但它允许您一次控制一个脚本的路径,将它放入
.bashrc
/
.bash\u profile
或类似的文件中,可以在整个shell会话中更改它。

导出PYTHONPATH=$PYTHONPATH:
将优先考虑系统路径,并且只有在没有系统路径的情况下才会查看路径

export PYTHONPATH=:$PYTHONPATH
将首先搜索
,然后搜索$PYTHONPATH以查找未找到的内容


如果两者中都存在某种东西,但您希望将其一个版本用于一个程序,另一个版本用于另一个程序,那么您可能需要查看不同的bashrc配置文件。

在PYTHONPATH中对条目进行排序部分是正确的,但是在运行python之前,系统路径似乎不会被包括在内,然后它们会被放在最后。因此,要将系统路径放在前面,请显式添加它:

export PYTHONPATH="[path/to/system/files]:$PYTHONPATH"

这是一种黑客行为,因为您添加的系统路径将在sys.path中重复。但它是有效的。

我尝试过实现它,但它似乎不起作用。Python仍在阅读$PYTHONPATH first,有什么建议吗?您是从终端启动程序吗?因为如果您不这样做,并且您从它们的快捷方式启动器启动它们,则不会设置
PYTHONPATH
。另外,从终端启动的“echo$PYTHONPATH$”的输出(在终端中运行)是什么,echo$PYTHONPATH返回:/home/sean/OpenFOAM/ThirdParty-3.0.x/platforms/linux64Gcc/ParaView-4.4.0/lib/ParaView-4.4/site packages:/home/sean/OpenFOAM/ThirdParty-3.0.x/platforms/linux64Gcc/ParaView-4.4/site-packages/vtkAnd这是路径的优先级。但是要考虑到程序需要从终端启动,你这样做了吗?是的,程序是从终端启动的,问题是我想更改顺序,以便系统路径优先于openFOAM目录这似乎也不起作用,它只是在sys.path的开头添加了“path”,当我导入相同的函数(例如pygments.lexers)时,它仍然在调用python路径中的函数,“path”表示要插入的文件系统路径。对,这是有意义的。这对于在代码中调用函数很好,但是对于从命令行调用函数仍然不起作用。我试着调用它,将它插入我的pythonrc中,但从命令行调用应用程序时仍然会遇到同样的错误,可能我误解了你的问题。我认为您需要能够在同一执行中使用两个PYTHONPATH来实现两个不同的功能。如果您只需要在每个命令行执行中控制它,那么您可能应该使用
PYTHONPATH
env var。