命令行运行的Python脚本找不到site packages

1 投票
3 回答
13211 浏览
提问于 2025-04-18 15:10

我写了一个用Python 2.7做的应用程序,使用的是Eclipse里的PyDev,脚本在这里运行得很好。但是,如果我尝试在命令行中运行它,就会出现以下错误:

importError: No module named openpyxl

openpyxl是我在应用程序中使用的一个外部库。我搜索了一些解决方案,发现了很多讨论,有些是在这个网站上。大部分讨论都是关于程序员自己创建的模块,需要把src文件夹添加到路径中。但这对我来说不管用。我还尝试过把site包目录添加到我的Python路径中,但错误依然存在。

另外,运行的脚本(main.py)位于src目录下,像这样:

/Crawler/
    /src
        __init__.py
        main.py
        /Crawlers
            __init__.py
            Crawler1.py
            Crawler2.py

我该如何配置我的脚本,以便在命令行执行时能够找到所有外部库呢?

3 个回答

0

我之前也遇到过类似的问题,是因为虚拟环境的原因。如果你在用venv这个工具,你需要先在终端里激活它。先进入你的项目文件夹,然后执行 venv\Scripts\activate,接着再运行你的脚本。

0

你可以查看路径变量,了解 Python 在哪里寻找已安装的模块。

import sys
print(sys.path)

你的 openpyxl 模块必须放在这些路径的某个子文件夹里。如果这个包不在任何子文件夹中,有几种解决办法。一个方法就是你提到的,使用 PYTHONPATH,在命令行中添加包含 openpyxl 的文件夹,或者你也可以用 sys 模块在运行时添加这个文件夹。

import sys
sys,path.append('/path/to/module/')

另一种方法是使用随模块一起提供的 setup.py 文件,将模块安装到 Python 路径中,命令是 python setup.py install --user。或者你可以通过 pip 从 PyPi 安装,命令是 pip install --user openpyxl

2

首先,检查一下你电脑上默认的Python版本是不是2.7。你可以运行 python --version 这个命令。如果显示的版本不是2.7,那就需要用2.7的解释器来运行你的脚本。

python2.7 <yourscriptname>

如果你是在UNIX或OSX系统上,可以把脚本的第一行改成直接调用Python 2.7。

#!/usr/bin/env python2.7

补充说明:如果Python版本是正确的,接下来要检查一下你能不能在交互式解释器中导入这个模块。如果你看到的输出和下面的类似,那说明 openpyxl 这个模块没有正确安装。

python
Python 2.7.8 (default, Jul 20 2014, 12:09:51) 
[GCC 4.2.1 Compatible FreeBSD Clang 3.4 (tags/RELEASE_34/final 197956)] on freebsd10
Type "help", "copyright", "credits" or "license" for more information.
>>> import openpyxl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named openpyxl
>>>

撰写回答