在Ubuntu中找不到模块(但已安装)

3 投票
2 回答
13278 浏览
提问于 2025-04-17 12:02

我的脚本在原版的Ubuntu 10.10上运行得很好,安装了lxml模块后就没问题了。(使用的是python 2.6.6)

后来我手动编译并安装了python 2.7(是从源代码编译的)。结果我的脚本就不再工作了:

Error: ImportError: No module named lxml

我又回到了python 2.6.7(也是从源代码编译的),但是错误依然存在。正确的python版本(2.6.7)被调用了。

注意:在出现错误后,我多次删除并重新安装了python-lxml这个包,但错误还是没解决:

sudo aptitude install pyhton-lxml

我是不是需要执行什么神奇的脚本,让python找到这个模块呢?

下面是命令strace ./RunScriptPython.py的输出结果(使用python -v

$ strace ./RunScriptPython.sh 
execve("./RunScriptPython.sh", ["./RunScriptPython.sh"], [/* 38 vars */]) = 0
brk(0)                                  = 0x9be3000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb770c000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=81621, ...}) = 0
mmap2(NULL, 81621, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb76f8000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@n\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1421892, ...}) = 0
mmap2(NULL, 1427880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x1d7000
mmap2(0x32e000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x157) = 0x32e000
mmap2(0x331000, 10664, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x331000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76f7000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb76f78d0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0x32e000, 8192, PROT_READ)     = 0
mprotect(0x805c000, 4096, PROT_READ)    = 0
mprotect(0xf33000, 4096, PROT_READ)     = 0
munmap(0xb76f8000, 81621)               = 0
getpid()                                = 3006
rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
geteuid32()                             = 905975433
brk(0)                                  = 0x9be3000
brk(0x9c04000)                          = 0x9c04000
getppid()                               = 3005
stat64("/home/CEDROFINANCES/alexander.miro/dev/cedro/20120113_8P_Correcoes_linux/tools/bean_maker", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("./RunScriptPython.sh", O_RDONLY)  = 3
fcntl64(3, F_DUPFD, 10)                 = 10
close(3)                                = 0
fcntl64(10, F_SETFD, FD_CLOEXEC)        = 0
rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {0x8056690, ~[RTMIN RT_1], 0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], 0}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], 0}, NULL, 8) = 0
read(10, "#!/bin/sh\nrm -rf ../../broker_co"..., 8192) = 325
open("../../broker_communication/beans", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
fcntl64(3, F_GETFD)                     = 0x1 (flags FD_CLOEXEC)
getdents(3, /* 3 entries */, 32768)     = 48
getdents(3, /* 0 entries */, 32768)     = 0
close(3)                                = 0
stat64("/usr/local/sbin/rm", 0xbf926940) = -1 ENOENT (No such file or directory)
stat64("/usr/local/bin/rm", 0xbf926940) = -1 ENOENT (No such file or directory)
stat64("/usr/sbin/rm", 0xbf926940)      = -1 ENOENT (No such file or directory)
stat64("/usr/bin/rm", 0xbf926940)       = -1 ENOENT (No such file or directory)
stat64("/sbin/rm", 0xbf926940)          = -1 ENOENT (No such file or directory)
stat64("/bin/rm", {st_mode=S_IFREG|0755, st_size=46756, ...}) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb76f7938) = 3007
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 3007
--- SIGCHLD (Child exited) @ 0 (0) ---
open("../../broker_communication/fix_translation", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
getdents(3, /* 3 entries */, 32768)     = 48
getdents(3, /* 0 entries */, 32768)     = 0
close(3)                                = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb76f7938) = 3008
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 3008
--- SIGCHLD (Child exited) @ 0 (0) ---
stat64("/usr/local/sbin/python", 0xbf926940) = -1 ENOENT (No such file or directory)
stat64("/usr/local/bin/python", {st_mode=S_IFREG|0755, st_size=4081553, ...}) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb76f7938) = 3009
wait4(-1, # installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# /usr/local/lib/python2.6/site.pyc matches /usr/local/lib/python2.6/site.py
import site # precompiled from /usr/local/lib/python2.6/site.pyc
# /usr/local/lib/python2.6/os.pyc matches /usr/local/lib/python2.6/os.py
import os # precompiled from /usr/local/lib/python2.6/os.pyc
import errno # builtin
import posix # builtin
# /usr/local/lib/python2.6/posixpath.pyc matches /usr/local/lib/python2.6/posixpath.py
import posixpath # precompiled from /usr/local/lib/python2.6/posixpath.pyc
# /usr/local/lib/python2.6/stat.pyc matches /usr/local/lib/python2.6/stat.py
import stat # precompiled from /usr/local/lib/python2.6/stat.pyc
# /usr/local/lib/python2.6/genericpath.pyc matches /usr/local/lib/python2.6/genericpath.py
import genericpath # precompiled from /usr/local/lib/python2.6/genericpath.pyc
# /usr/local/lib/python2.6/warnings.pyc matches /usr/local/lib/python2.6/warnings.py
import warnings # precompiled from /usr/local/lib/python2.6/warnings.pyc
# /usr/local/lib/python2.6/linecache.pyc matches /usr/local/lib/python2.6/linecache.py
import linecache # precompiled from /usr/local/lib/python2.6/linecache.pyc
# /usr/local/lib/python2.6/types.pyc matches /usr/local/lib/python2.6/types.py
import types # precompiled from /usr/local/lib/python2.6/types.pyc
# /usr/local/lib/python2.6/UserDict.pyc matches /usr/local/lib/python2.6/UserDict.py
import UserDict # precompiled from /usr/local/lib/python2.6/UserDict.pyc
# /usr/local/lib/python2.6/_abcoll.pyc matches /usr/local/lib/python2.6/_abcoll.py
import _abcoll # precompiled from /usr/local/lib/python2.6/_abcoll.pyc
# /usr/local/lib/python2.6/abc.pyc matches /usr/local/lib/python2.6/abc.py
import abc # precompiled from /usr/local/lib/python2.6/abc.pyc
# /usr/local/lib/python2.6/copy_reg.pyc matches /usr/local/lib/python2.6/copy_reg.py
import copy_reg # precompiled from /usr/local/lib/python2.6/copy_reg.pyc
import encodings # directory /usr/local/lib/python2.6/encodings
# /usr/local/lib/python2.6/encodings/__init__.pyc matches /usr/local/lib/python2.6/encodings/__init__.py
import encodings # precompiled from /usr/local/lib/python2.6/encodings/__init__.pyc
# /usr/local/lib/python2.6/codecs.pyc matches /usr/local/lib/python2.6/codecs.py
import codecs # precompiled from /usr/local/lib/python2.6/codecs.pyc
import _codecs # builtin
# /usr/local/lib/python2.6/encodings/aliases.pyc matches /usr/local/lib/python2.6/encodings/aliases.py
import encodings.aliases # precompiled from /usr/local/lib/python2.6/encodings/aliases.pyc
# /usr/local/lib/python2.6/encodings/utf_8.pyc matches /usr/local/lib/python2.6/encodings/utf_8.py
import encodings.utf_8 # precompiled from /usr/local/lib/python2.6/encodings/utf_8.pyc
Python 2.6.7 (r267:88850, Jan 30 2012, 14:30:06) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
  File "bean_maker.py", line 1, in <module>
    from lxml import etree
ImportError: No module named lxml
# clear __builtin__._
# clear sys.path
# clear sys.argv
# clear sys.ps1
# clear sys.ps2
# clear sys.exitfunc
# clear sys.exc_type
# clear sys.exc_value
# clear sys.exc_traceback
# clear sys.last_type
# clear sys.last_value
# clear sys.last_traceback
# clear sys.path_hooks
# clear sys.path_importer_cache
# clear sys.meta_path
# clear sys.flags
# clear sys.float_info
# restore sys.stdin
# restore sys.stdout
# restore sys.stderr
# cleanup __main__
# cleanup[1] encodings
# cleanup[1] site
# cleanup[1] abc
# cleanup[1] _codecs
# cleanup[1] _warnings
# cleanup[1] zipimport
# cleanup[1] encodings.utf_8
# cleanup[1] codecs
# cleanup[1] signal
# cleanup[1] posix
# cleanup[1] encodings.aliases
# cleanup[1] exceptions
# cleanup[2] copy_reg
# cleanup[2] posixpath
# cleanup[2] errno
# cleanup[2] _abcoll
# cleanup[2] types
# cleanup[2] genericpath
# cleanup[2] stat
# cleanup[2] warnings
# cleanup[2] UserDict
# cleanup[2] os.path
# cleanup[2] linecache
# cleanup[2] os
# cleanup sys
# cleanup __builtin__
# cleanup ints: 18 unfreed ints
# cleanup floats
[{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 3009
--- SIGCHLD (Child exited) @ 0 (0) ---
read(10, "", 8192)                      = 0
exit_group(1)                           = ?

2 个回答

0

Aptitude 只会为你系统自带的标准 Python(2.6.6)安装 python-lxml。如果你想为手动安装的 Python 版本使用 lxml,你需要为每个 Python 版本单独安装它。

请查看 这个 StackOverflow 的回答。最简单的方法是使用 easy_installpip(这两个工具可以直接从 PyPI 下载软件包。它们的功能类似于 aptitude,但专门用于 Python 软件包)。

所以,在安装了 pip 或 distribute 之后:

easy_install-2.7 lxml
/path/to/python2.7 /path/to/pip install lxml
5

为了验证我的诊断(见下文)是否正确,你可以试着运行一下:

/usr/bin/python ./RunScriptPython.py

(应该可以正常工作。)


注意你发布的输出中的这一点:

import site # precompiled from /usr/local/lib/python2.6/site.pyc

导入的库正在查找 /usr/local/lib/python2.6。这个路径不是 Ubuntu 系统默认的 Python 版本。这是一个本地安装的版本。

当你安装 python-lxml 包时,它会被安装在 /usr/lib/python2.6/,并且可以通过 Ubuntu 系统默认的 Python 版本访问,这个版本在 /usr/bin 下,而不是你似乎正在使用的 /usr/local/bin 下的 Python。

除非你有特殊原因需要使用 /usr/local 版本的 Python,否则最简单的解决办法就是卸载它,使用 /usr/bin 下的 Python 版本。

撰写回答