更改pythonpath的优先级

2024-04-29 15:57:51 发布

您现在位置:Python中文网/ 问答频道 /正文

当我加载某些模块时pygments.lexers公司Bash Lexer和pygments.格式化程序LatexFormatter]我得到一个错误,python找不到模块。然后我意识到这个问题是由PYTHONPATH引起的,PYTHONPATH是为在python中使用paraview而设置的。它带来了自己的pygments版本,由于某些原因无法与jupyter笔记本上的nbconvert一起使用[请注意,它并不是完全失效的,就像PythonLexer一样,还有一些其他版本没有问题,只是我上面提到的那些找不到]。在

我对mayavi也有类似的问题,它不能与paraview的vtk版本一起工作。在

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

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

我在LinuxMint17.3上使用Python2.76,paraview是4.4.0版,根据here从源代码安装


Tags: 模块程序版本bashpygments错误公司jupyter
3条回答

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

export PYTHONPATH=<your_path>:$PYTHONPATH将首先搜索<your_path>,然后$PYTHONPATH查找它没有找到的内容。在

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

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

注意,这是相当老套的。但听起来你可能有理由这么做,尽管我还没有把这些特定的工具放在一起看。在

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

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

这比仅仅调用python要复杂得多(除非您将其包装在shell脚本或别名中),但是它允许您一次控制一个脚本的路径,在这里将它放入.bashrc/.bash_profile中,或者对整个shell会话进行类似的更改。在

对PYTHONPATH中的条目进行排序在一定程度上是正确的,但是在运行python并将它们放在末尾之前,系统路径似乎不会包含在中。因此,要将系统路径放在前面,请显式地添加它:

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

这是一种黑客攻击,因为你添加的系统路径会被复制搜索路径. 但它是有效的。在

相关问题 更多 >