编辑:根据乌尔夫Rompe的评论, 你用“1”而不是“0”,否则你会打破它是非常重要的 sys.path中 。
我一直在做蟒蛇相当长的一段时间了(超过一年),而我总是困惑,为什么人们建议您使用sys.path.append()
代替sys.path.insert()
让我来证明。
比方说,我在一个模块名为PyWorkbooks工作(即安装在我的计算机上),但我在不同的模块同时工作(比方说PyJob)并入PyWorkbooks。 由于我的工作PyJob我发现,我纠正错误PyWorkbooks,所以我想导入一个开发版本。
有多种方法可以在两个工作(我可以把我的PyWorkbooks项目PyJob内,例如),但有时我仍然需要与路径玩。 但是, 我不能简单地做一个sys.path.append()
到PyWorkbooks是在文件夹中 。 为什么? 因为Python会先找到我安装PyWorkbooks!
这就是为什么你必须做一个sys.path.insert(1,path_to_dev_pyworkbooks)
综上所述:
sys.path.append(path_to_dev_pyworkbooks)
import PyWorkbooks # does NOT import dev pyworkbooks, imports installed one
要么:
sys.path.insert(1, path_to_dev_pyworkbooks) # based on comments you should use **1 not 0**
import PyWorkbooks # imports correct file
这在过去造成了一些挂断了我,我真的很喜欢它,如果我们(作为一个团体)开始推荐sys.path.insert(1, path)
,因为如果你手工将一个路径,我认为它是肯定地说,这是您要使用的路径!
还是我什么了吗? 这是一个问题,有时令我烦恼,我想它的开放!
如果你有一个包/模块的多个版本,你需要使用的virtualenv (重点煤矿):
virtualenv
是创建孤立的Python环境的工具。
正在解决的基本问题是依赖关系和版本,间接的权限之一。 想象一下,你有一个需要libfoo的版本1的应用程序,但你怎么能同时使用这些应用程序另一个应用程序需要版本2? 如果您安装到一切/usr/lib/python2.7/site-packages
(或任何平台的标准位置),很容易在一个情况下,你无意中升级不应该升级的应用程序来结束。
或者更一般地,如果你想要安装的应用程序,并把它呢? 如果一个应用程序的工作,在图书馆或任何改变这些库的版本可以打破该应用程序。
另外,如果您不能安装什么包进入全球site-packages
目录? 例如,一个共享的主机上。
在所有这些情况下, virtualenv
可以帮助你。 它创建有自己的安装目录的环境中,不与其他的virtualenv环境共享库(并可选地不要么访问全球的装机库)。
这就是为什么人们认为insert(0,
是错误的-这是一个不完整的,权宜之计来管理多个环境问题。
如果你确实需要使用sys.path.insert,考虑离开的sys.path [0],因为它是:
sys.path.insert(1, path_to_dev_pyworkbooks)
这可能是重要的,因为第三方代码可能依赖于sys.path中文档的一致性:
为对程序启动时,该列表的第一项,路径[0]初始化,是含有用于调用Python解释脚本的目录。
你混淆了追加和预先计算的概念。 下面的代码是预先计算:
sys.path.insert(1,'/thePathToYourFolder/')
它把在开始(当然,第二,要准确),你的解释会通过搜索序列的新信息。 sys.path.append()
把东西在搜索顺序的末尾。
这是可取的,你使用类似virtualenv
,而不是手动编码您的软件包目录到PYTHONPATH
每次。 设立该单独的站点包和Python的可能版本不同的生态系统,阅读这些两个博客:
蟒蛇生态系统介绍
引导蟒蛇虚拟环境
:如果你决定要向下移动的路径,环境隔离,你一定会通过观察virtualenvwrapper受益http://www.doughellmann.com/docs/virtualenvwrapper/