【问题标题】:Python 2.7 imports module from wrong locationPython 2.7 从错误的位置导入模块
【发布时间】:2016-06-01 05:33:57
【问题描述】:

我在 Python 2.7.6 和 Ubuntu 14.04 上,我正在尝试导入 openpyxl。我通过sudo pip install openpyxl --upgrade 升级到最新版本,pip show openpyxl 提供以下输出:

pip show openpyxl
---
Name: openpyxl
Version: 2.3.3
Location: /usr/local/lib/python2.7/dist-packages
Requires: 

但是,当在 python 内部时,在我 import openpyxl 之后似乎从不同的位置加载它:/usr/lib 而不是 /usr/local/lib

openpyxl.__version__
'1.7.0'
openpyxl.__file__
'/usr/lib/pymodules/python2.7/openpyxl/__init__.pyc'

我已将$PYTHONPATH 设置为/usr/local/lib/python2.7/dist-packages

当查看 sys.path 时,我得到以下输出:

['', '/usr/local/lib/python2.7/dist-packages',... and 12 other locations]

它似乎首先有我想要的位置。然而加载了错误的模块。

编辑:

$PATH的内容:

/misc/software-lin/lmbsoft/build/x86_64-gcc4.8/release/bin:/misc/software-lin/lmbsoft/build/x86_64-gcc4.8/debug/bin:/misc/software-lin/lmbsoft/build/x86_64-gcc4.8/bin:/home/maid/phd/3rdpartySoft/art-2009-03-12/bin:/home/maid/phd/3rdpartySoft/ANTs-1.9.x-Linux/bin:/misc/software-lin/lmbsoft/build/x86_64-gcc4.8/release/bin:/misc/software-lin/lmbsoft/build/x86_64-gcc4.8/debug/bin:/misc/software-lin/lmbsoft/build/x86_64-gcc4.8/bin:/home/maid/phd/3rdpartySoft/art-2009-03-12/bin:/home/maid/phd/3rdpartySoft/ANTs-1.9.x-Linux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:.:/home/maid/bin:/misc/software-lin/matlabR2015a/bin:/home/maid/phd/3rdpartySoft/nifty_reg-1.3/niftyreg_install/bin:/misc/software-lin/lmbsoft/cudatoolkit-3.2.16-x86_64/cuda/bin:/misc/database/cv2/local/bin:/misc/software-lin/vibez/bin:/usr/lib/jvm/java-6-openjdk/jre/bin:/misc/software-lin/vivi:/home/maid/localsoft/voreen/voreen-src-3.0.1-unix/bin/:/home/maid/tmp/ij146/ImageJ:.:/home/maid/bin:/misc/software-lin/matlabR2015a/bin:/home/maid/phd/3rdpartySoft/nifty_reg-1.3/niftyreg_install/bin:/misc/software-lin/lmbsoft/cudatoolkit-3.2.16-x86_64/cuda/bin:/misc/database/cv2/local/bin:/misc/software-lin/vibez/bin:/usr/lib/jvm/java-6-openjdk/jre/bin:/misc/software-lin/vivi:/home/maid/localsoft/voreen/voreen-src-3.0.1-unix/bin/:/home/maid/tmp/ij146/ImageJ

任何帮助表示赞赏, 谢谢,多米尼克

【问题讨论】:

  • 这确实很奇怪,不知道为什么会忽略它。如果您仅出于故障排除目的尝试使用 simlink 会怎样?
  • 问题是我没有管理权限,而那个周一回来的人(大学)。但为了正确起见:您的意思是指向 /usr/lib/pymodules/python2.7/ 的符号链接 --> /usr/local/lib/python2.7/dist-packages ?
  • 不直接指向py文件,但是是在/usr/lib中的/usr/local/lib中创建一个

标签: python python-2.7 python-module openpyxl


【解决方案1】:

我假设如果你echo $PATH,你会发现/usr/lib/usr/local/lib 之前被搜索。因为它首先在/usr/lib 中找到它,所以它不会继续在/usr/local/lib 中查找。

sys.path 仅涵盖$PYTHONPATH 变量,不显示$PATH 的内容。

【讨论】:

  • 另外,检查哪个版本的 Python pip 正在使用。在 Debian 上,我认为最好构建自己的 Python 并将其用于您的软件包。
  • pip 是版本1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)$PATH 没有上面提到的任何一个。我取消了LD_LIBRARY_PATH,这造成了一些问题。
  • 你能告诉我们$PATH的内容吗?当你在“内部”Python 时,你在使用 sudo 吗?
  • 我编辑了这个问题。不,我不是 sudoing,“内部”是指交互模式。当我使用 main 方法调用 .py 脚本时也会发生同样的情况。 ...大声笑显然双下划线使评论中的内容变粗;)
  • 为什么输入sudo 而输入pip install openpyxl --upgrade?不用 sudo 可以运行吗?
【解决方案2】:

我能够通过

使其工作
  1. 通过 ubuntus 包管理器删除旧的 openpyxl 包。
  2. /usr/local/lib/python2.7/dist-packages 对所有人都可读,奇怪的是以前不是这样 - 我没有注意到。

感谢所有努力帮助我的人。 多米尼克

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2015-04-04
    • 2016-01-03
    • 2018-05-16
    • 2017-06-19
    • 1970-01-01
    相关资源
    最近更新 更多