Python sys.path修改不起作用

时间:2009-06-19 13:14:52

标签: python path

我正在尝试修改我的一个Python文件中的sys.path以获得一些 模块搜索路径中的特定库dirs(它可能不是最好的方式 但是......)如果我在sys.path的前面插入几个路径,我的脚本没有考虑将来导入的路径。如果我创建一个包含我需要的库的全新列表并将该列表分配给sys.path,则会考虑这些导入。这是正确的行为吗?我正在使用python 2.5.4。它可能是我环境中可能导致这种行为的东西吗?

一些代码段: 如果我做

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

这是行不通的。它没有考虑路径。

如果我这样做

pathList = [pathToInsert1, pathToInsert2] 
sys.path = pathList

它有效。

由于

4 个答案:

答案 0 :(得分:18)

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

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

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

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

如果是,那么这是不正确的。这将创建一个类似于

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

你应该说

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

会给你

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

但在你发布代码之前,这一切都是猜测。

答案 1 :(得分:4)

更新从here

获取的sys.path的示例
import sys
sys.path.append("/home/me/mypy")

这对我有用。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:2)

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

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

__init__.py

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

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

这给出了一个ImportError,因为from foo.bar import quux不在carol中,但sys.path没有修复ImportError。

所需要的是通知sys.path.append('carol')模块其中一个bar可以在'carol / foo / bar'中找到。

__init__.py