Enthought Python软件包导入优先级

3
我正在使用venv安装PyPI上比根环境中可用的elpy包更新的版本。从pip查询,我看到elpy的以下版本:
~/python/standalone $ pip show elpy
---
Name: elpy
Version: 1.4.2
Location: /home/wdkrnls/python/env/local/lib/python2.7/site-packages
Requires: flake8

然而,使用解释器会给我返回根环境的版本。
In [4]: import elpy
In [5]: elpy.__version__
Out[5]: '1.3.0'
In [6]: ?elpy
Type:       module
String Form:<module 'elpy' from '/home/ipython/Enthought2/lib/python2.7/site-packages/elpy/__init__.pyc'>
File:       /home/ipython/Enthought/lib/python2.7/site-packages/elpy/__init__.py
Docstring:
The Emacs Lisp Python Environment.

为什么会出现这种情况,我该如何解决?
我的sys.path很乱,我不知道该如何清理它(我以前升级过Canopy发行版),但是这里有它的内容:
['',
 '/home/wdkrnls/python/env/local/bin',
 '/home/wdkrnls/python/env/local/lib/python2.7/site-packages/jediepcserver-0.0.0-py2.7.egg',
 '/home/wdkrnls/python/env/local/lib/python2.7/site-packages/epc-0.0.5-py2.7.egg',
 '/home/wdkrnls/python/env/local/lib/python2.7/site-packages/sexpdata-0.0.3-py2.7.egg',
 '/home/ipython/Enthought2/lib/python2.7/site-packages/PyCifRW-3.3-py2.7-linux-x86_64.egg',
 '/home/ipython/Enthought2/lib/python2.7/site-packages/graphtool-0.5.2-py2.7.egg',
 '/home/ipython/Enthought2/lib/python2.7/site-packages',
 '/home/wdkrnls/python/env/local/lib/python2.7/site-packages/argparse-1.2.1-py2.7.egg',
 '/share/apps/python/Canopy/appdata/canopy-1.3.0.1715.rh5-x86_64/lib/python2.7/site-packages',
 '/home/ipython/Enthought/Canopy_64bit/User/lib/python2.7/site-packages',
 '/home/wdkrnls/python/packages',
 '/home/wdkrnls/python/standalone',
 '/share/apps/python/Canopy/appdata/canopy-1.3.0.1715.rh5-x86_64/lib/python27.zip',
 '/share/apps/python/Canopy/appdata/canopy-1.3.0.1715.rh5-x86_64/lib/python2.7',
 '/share/apps/python/Canopy/appdata/canopy-1.3.0.1715.rh5-x86_64/lib/python2.7/plat-linux2',
 '/share/apps/python/Canopy/appdata/canopy-1.3.0.1715.rh5-x86_64/lib/python2.7/lib-tk',
 '/share/apps/python/Canopy/appdata/canopy-1.3.0.1715.rh5-x86_64/lib/python2.7/lib-old',
 '/share/apps/python/Canopy/appdata/canopy-1.3.0.1715.rh5-x86_64/lib/python2.7/lib-dynload',
 '/home/wdkrnls/python/env/local/lib/python2.7/site-packages',
 '/home/ipython/Enthought2/lib/python2.7/site-packages/PIL',
 '/home/ipython/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL',
 '/share/apps/python/Canopy/appdata/canopy-1.3.0.1715.rh5-x86_64/lib/python2.7/site-packages/IPython/extensions',
 '/home/wdkrnls/python/packages',
 '/home/wdkrnls/python/standalone']

我该如何维护 sys.path?对于 Canopy 发行版,我是否需要所有这些 .egg 文件?


可能是Python路径和导入顺序的重复问题。 - aruisdante
哦...我的本地源在根网站包之前被检查。 - wdkrnls
在你的 .bashrc 文件中导出路径。 - Padraic Cunningham
2个回答

0

看起来你正在使用ipython。如果你没有在虚拟环境中安装ipython,那么运行的ipython可执行文件将是系统自带的。

为了检查,请比较which ipythonwhich python。Python可执行文件应该是虚拟环境中的一个。如果我打赌,ipython可执行文件就是系统自带的。


1
'/home/wdknrls/python/env/local/bin/ipython' 是我安装的 ipython 的位置,我可以通过 which 命令来获取它,与 '/home/wdkrnls/python/env/local/bin/python' 进行比较。两者似乎都是本地的。 - wdkrnls
@wdkrnls - 好的,那就算了吧!你在创建虚拟环境时使用了 --no-site-packages 选项吗? - Joe Kington
我想我告诉它要继承自站点包,因为有些站点包我想使用,如果我没有在本地安装我自己喜欢的版本。 - wdkrnls

0

可以通过打印sys.path来查找优先顺序。


是的,优先级有误。最干净的解决方法是什么? - wdkrnls
你的sys.path是什么?如果有的话,环境变量PYTHONPATH和PYTHONHOME的值是什么? - Jonathan March
我在PYTHONPATH中只有两个目录:/home/wdkrnls/python/packages和/home/wdkrnls/python/standalone。在PYTHONHOME中没有任何内容。 - wdkrnls
你的sys.path是什么? - Jonathan March
我在问题中添加了 sys.path。这真的很混乱,但我不确定如何正确地维护它。有什么建议吗? - wdkrnls
你不知道怎么把两个Python安装程序搞混了,这是一件会引发混乱的事情。请问which pythonwhich ipython以及which pip命令返回了什么?当你使用“使用解释器”来描述输出时,你在运行哪个程序(来自哪里)? - Jonathan March

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接