第三个无关的细节是问题所在:pyenv。在
有一个bug报告here,但长话短说,pyenv使用垫片来拦截包导入并正确路由它们。在
这意味着pyenv必须在这条道路上混日子。当我直接运行python时,这些垫片在python路径中很明显:[dnelson@blueharvest somedir]$ python
Python 2.7 (r27:82500, Jun 1 2015, 15:01:57)
[GCC 4.9.2 20150212 (Red Hat 4.9.2-6)] on linux3
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> site.getsitepackages()
['/home/dnelson/.pyenv/versions/2.7/lib/python2.7/site-packages', '/home/dnelson/.pyenv/versions/2.7/lib/site-python']
>>> site.PREFIXES
['/home/dnelson/.pyenv/versions/2.7', '/home/dnelson/.pyenv/versions/2.7']
>>>
但是,在动态导入的包中,相同的代码会导致以下输出:
^{pr2}$
因此,问题似乎是pyenv在动态导入过程中没有发挥它的填充魔法。在
{pip1要解决的问题是动态安装,而不是强制安装。(如果您以前安装了软件包以强制重新安装,还可以添加一个-I)
也可以通过使用sys.path.append将安装位置(在我的例子中,/usr/lib/python2.7/site-packages)附加到python路径中来解决这个问题,但这很难闻,而且可能会给其他人带来麻烦。在