【问题标题】:Python sys.path modification not workingPython sys.path 修改不起作用
【发布时间】:2009-06-19 13:14:52
【问题描述】:

我正在尝试修改我的一个 Python 文件中的 sys.path 以获得一些 模块搜索路径中的特定库目录(这可能不是最好的方法 但 ...)。如果我在 sys.path 前面插入多个路径,我的脚本不会考虑这些路径以供将来导入。如果我制作了一个包含我需要的那些库目录的全新列表并将该列表分配给 sys.path ,那么这些导入将被考虑在内。这是正确的行为吗?我正在使用 python 2.5.4。会不会是我的环境中的某些东西导致了这种行为?

一些代码sn-ps: 如果我做

pathtoInsert1 = " .... " pathtoInsert2 = " .... " sys.path.insert(0, pathToInsert1) sys.path.insert(0, pathToInsert2)

这没用。它不考虑路径。

如果我这样做

pathList = [pathToInsert1, pathToInsert2] sys.path = 路径列表

它有效。

谢谢

【问题讨论】:

  • 请发布一些代码,展示您如何添加路径。
  • 我觉得进口机制在过去 10 年中可能已经发生了很大的变化,因此这个问题不再发生,或者至少会以不同的方式解决。

标签: python path


【解决方案1】:

您确实需要发布一些代码以便我们能够为您提供帮助。但是,我可以做出有根据的猜测。您说,如果您制作一个全新的列表并将其分配给 sys.path ,那么它就可以工作。我假设你的意思是你正在做这样的事情

sys.path = ["dir1", "dir2", ...]

但是,如果您在开头插入路径,则它不起作用。我的猜测是您正在使用插入方法,就像这样

sys.path.insert(0, ["dir1", "dir2"])

如果是这样,那么这是不正确的。这将创建一个看起来像

的列表
[["dir1", "dir2"], "dir3", ...]

你应该说

sys.path[:0] = ["dir1", "dir2"]

这会给你

["dir1", "dir2", "dir3", ...]

但在您发布代码之前,这都是猜测。

【讨论】:

    【解决方案2】:

    here更新sys.path的例子

    import sys
    sys.path.append("/home/me/mypy")
    

    这对我有用。

    【讨论】:

      【解决方案3】:

      我在 iPython 中使用分布在多个目录中的模块时遇到了类似的问题。在这种情况下,要使导入工作,必须确保具有分布式__init__.py 的模块的module.__path__ 包括模块的__init__.py 之一所在的所有目录,并确保正确的目录位于系统中.path 列表。

      例如,我有一个名为 foo 的模块,其中包含一个名为 bar 的模块,该模块分布在多个目录中:

      aerith/foo/bar/__init__.py
      aerith/foo/bar/baz/__init__.py
      bob/foo/bar/__init__.py
      bob/foo/bar/baf/__init__.py
      carol/foo/bar/__init__.py
      carol/foo/bar/quux/__init__.py
      

      在iPython中,我已经导入了baz和baf,想导入quux。

      from foo.bar import quux

      这给出了 ImportError,因为 carol 不在 sys.path 中,但 sys.path.append('carol') 没有修复 ImportError。

      需要通知bar 模块,它的__init__.py 之一可以在“carol/foo/bar”中找到。

      foo.bar.__path__.append('carol/foo/bar')
      from foo.bar import quux
      

      【讨论】:

        【解决方案4】:

        您如何“插入”其他路径?

        修改路径的方式与修改 Python 中任何其他列表的方式相同 - 尽管听起来您只是通过重新分配它来破坏它。

        更新 sys.path 示例:http://www.johnny-lin.com/cdat_tips/tips_pylang/path.html

        【讨论】:

          猜你喜欢
          • 2013-06-17
          • 2015-04-10
          • 1970-01-01
          • 2020-02-24
          • 2014-06-06
          • 1970-01-01
          • 2017-09-13
          • 2016-10-24
          • 1970-01-01
          相关资源
          最近更新 更多