在命令行上运行的Python脚本可以';找不到网站包
我已经使用PyDev for Eclipe编写了一个Python应用程序,其中的Python 2.7脚本执行得非常完美。但是,如果尝试在命令行上运行它,则会出现以下错误:在命令行上运行的Python脚本可以';找不到网站包,python,importerror,Python,Importerror,我已经使用PyDev for Eclipe编写了一个Python应用程序,其中的Python 2.7脚本执行得非常完美。但是,如果尝试在命令行上运行它,则会出现以下错误: importError: No module named openpyxl openpyxl是我在应用程序中使用的外部库之一。我搜索了解决方案,发现了多个线程,其中一些在这个网站上。它们都处理由程序员自己创建的模块,并且需要将src文件夹附加到路径。这对我不管用。我还尝试将站点包目录添加到Python路径中,但仍然存在错误
importError: No module named openpyxl
openpyxl是我在应用程序中使用的外部库之一。我搜索了解决方案,发现了多个线程,其中一些在这个网站上。它们都处理由程序员自己创建的模块,并且需要将src文件夹附加到路径。这对我不管用。我还尝试将站点包目录添加到Python路径中,但仍然存在错误
此外,运行的脚本(main.py)位于src目录中,如下所示:
/Crawler/
/src
__init__.py
main.py
/Crawlers
__init__.py
Crawler1.py
Crawler2.py
如何配置脚本,以便在从命令行执行时找到所有外部库?检查默认python版本是否为2.7。运行python--version。如果默认值不是2.7,则使用2.7解释器调用脚本
python2.7 <yourscriptname>
编辑:如果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
>>>
python
Python 2.7.8(默认值,2014年7月20日,12:09:51)
freebsd10上的[GCC 4.2.1兼容FreeBSD Clang 3.4(标签/发布\u 34/final 197956)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入openpyxl
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为openpyxl的模块
>>>
您可以检查path变量,找出python在哪里查找已安装的模块
import sys
print(sys.path)
您的openpyxl
模块必须位于其中一个模块的子文件夹中。如果此包不在其中一个子文件夹中,则有多种解决方案。一种是您指出的使用PYTHONPATH
并在cmd行上添加包含openpyxl
的文件夹,或者您也可以使用sys
模块在运行时添加文件夹
import sys
sys,path.append('/path/to/module/')
另一种方法是使用附带的
setup.py
将模块安装到python路径中,python setup.py install--user
。或者使用pip从PyPi安装,用户openpyxl打印sys.path会返回目录列表,其中一个包含openpyxl模块:“C:\\Python27\\Lib\\site packages'python--version
返回python2.7.7
@SergioP请尝试将其导入交互式解释器,如编辑中所示。我确实获得了该输出,但我不明白。除了这个模块外,其他模块是如何正确安装的?@SergioP可能是权限问题。检查是否可以在C:\Python27\Lib\site packages\openpyxl
(或任何确切名称)中打开文件,并检查该目录中是否存在文件\uuuuu init\uuuuu.py
。
import sys
sys,path.append('/path/to/module/')