当我加载某些模块[即pygments.lexers Bash Lexer和pygments.formatters LatexFormatter]时,我得到一个错误,python无法找到模块。然后我意识到这个问题是由我的PYTHONPATH引起的,它是为了使用py paraview设置的。它带来了自己的pygments版本,由于某种原因它不能从jupyter笔记本中使用nbconvert [注意它并非完全失效,因为PythonLexer和其他一些被调用没有问题,它只是那些我上面提到的那些无法找到的东西。
我和mayavi有类似的问题,它不会与paraview的vtk版本一起使用。
通过在bashrc中注释掉python路径,可以简单地解决这两个问题,但很明显,paraview不会起作用。
有没有办法,例如,降低PYTHONPATH的优先级,以便优先调用/ etc ...中的系统代码,但paraview仍然可以在PYTHONPATH中找到它需要的那些?
我在linux mint 17.3上使用python 2.76,paraview是版本4.4.0,根据here从源代码安装
答案 0 :(得分:1)
对PYTHONPATH中的条目进行排序是部分正确的,但在运行python 之前,系统路径似乎不会包含,然后它们会被放到最后。因此,要将系统路径放在前面,请明确添加它:
export PYTHONPATH="[path/to/system/files]:$PYTHONPATH"
这是一种黑客行为,因为您添加的系统路径将在sys.path中重复。但它确实有效。
答案 1 :(得分:0)
是的,您可以import sys
并在运行时将sys.path
作为普通列表进行操作。您可以重新排列其中的内容,或者只是在开头插入(sys.path.insert(0, 'path')
)。在import
声明之前执行此操作。如果这会在其他地方引起问题,请在import
声明之后将其恢复。
注意,这是相当hacky。但听起来你可能有一个案例,虽然我没有一起看过这些具体的工具。
编辑:如果你想在一次执行python的过程中控制单个导入级别的python路径,这就更有意义了。如果你想在一次完整执行Python的程度上控制路径,你也可以在命令行上设置python路径,就像这样执行:
PYTHONPATH=/replacement/path/here python your_script.py
除了调用python之外,这更详细(除非你将它包装在shell脚本或别名中),但它允许你一次控制一个脚本的路径,将它放入.bashrc
/ {{1或类似的更改它为您的整个shell会话。
答案 2 :(得分:0)
export PYTHONPATH=$PYTHONPATH:<your_path>
将优先考虑系统路径,并且只有在某些内容不存在的情况下才会显示在您的路径上。
export PYTHONPATH=<your_path>:$PYTHONPATH
将首先搜索<your_path>
,然后搜索$ PYTHONPATH以查找未找到的内容。
如果两者都存在,但你想将一个版本用于一个程序而另一个版本用于另一个程序,那么你可能希望查看不同的bashrc配置文件。