命令行运行的Python脚本找不到site packages
我写了一个用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 个回答
我之前也遇到过类似的问题,是因为虚拟环境的原因。如果你在用venv这个工具,你需要先在终端里激活它。先进入你的项目文件夹,然后执行 venv\Scripts\activate
,接着再运行你的脚本。
你可以查看路径变量,了解 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
。
首先,检查一下你电脑上默认的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
>>>