我正在尝试修改我的一个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
它有效。
由于
答案 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)
答案 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