【问题标题】:How to flexibly change PYTHONPATH如何灵活更改 PYTHONPATH
【发布时间】:2013-04-19 14:56:57
【问题描述】:

为了在 Java 中指定类路径,我使用 -cp-classpath 选项来代替 java。 Python 中的等效选项是什么?

我知道我可以设置操作系统变量PYTHONPATH,但不应该有一个PYTHONPATH 来统治它们。

我有时在 Eclipse 中使用 PyDev。它可以处理多个源目录。怎么样?

我经常有多个源目录。有时我将生产和测试代码分开。有时我有一个带有一些 Python 包的 Git 子模块。

【问题讨论】:

    标签: python organization pythonpath


    【解决方案1】:

    要在 Java 中指定类路径,我使用 -cp 或 -classpath 选项 到爪哇。 Python 中的等效选项是什么?

    好吧,据我所知,Python 中没有“等效选项”,但是如果您要像这样运行 Python,任何类 Unix 的 shell 都可以让您在每个进程的基础上设置/覆盖它。 ..

    $ PYTHONPATH=/put/path/here python myscript.py
    

    ...您也可以将其用于 Java 的语法...

    $ CLASSPATH=/put/path/here java MyMainClass
    

    与此等效的最接近的 Windows 将是...

    > cmd /c "set PYTHONPATH=\put\path\here && python myscript.py"
    

    ...如果您不希望在调用cmd.exe 中设置环境变量。

    我有时在 Eclipse 中使用 PyDev。它可以处理多个来源 目录。怎么样?

    在运行代码时,它可能会通过在execve(2) 调用中设置变量来执行类似的操作。

    【讨论】:

    • 每个进程的单个命令是我正在寻找的。有没有人知道用 Windows 也可以做到这一点?
    • @PaulDraper 如果你的意思是在cmd.exe,我认为你必须在两个电话中完成,即SET PYTHONPATH=blah 然后python blah。您可以将其包装在批处理文件中,但在批处理文件终止后它将保持设置状态,除非您使用另一个批处理文件包装批处理文件,该批处理文件使用CALL 调用它,IIRC 创建了一个新环境。跨度>
    • @PaulDraper 实际上,有一种更简单的方法 - 请参阅更新的答案。
    【解决方案2】:

    要以编程方式执行此操作,请使用以下代码:

    import sys
    sys.path.append('directory')
    

    如有必要,您可以从命令行参数指定要附加的目录。

    根据您的具体目标,这可能不是最好的解决方案,但对于小的一次性问题,它可以正常工作。

    【讨论】:

      【解决方案3】:

      这就是virtualenv 的用途。

      【讨论】:

      • 是的...我看过了,但我一定是误会了它的用法。因为没有人会要求这样做,只是一个简单的命令行 arg 就足够了......