python - 如何查找 python3 模块的位置并调试 ImportError

标签 python macos python-3.x pythonpath pyperclip

我在 MacbookPro (10.9.5) 上使用 Python 3.4.2。代码来自Automate the Boring Stuff with Python by Al Sweigart尝试在 python3 中运行脚本时出现奇怪的错误。 代码如下,但我认为这不是问题。这可能是一个模块路径问题,但从我的调试来看并不能 100% 确定。

我可以在空闲状态下运行代码,但无法从 cmd 行运行代码,无法使用 shebang 或 python3“脚本名称”运行。

我们可以在下面看到,pip3和python3都在/usr/local/bin中。我们还可以看到 pyperclip 模块已安装。但是,当从命令行运行脚本时,它说找不到该模块,即使它已安装。

我从我的终端运行了这个:

$ which pip3
/usr/local/bin/pip3
$ which python3
/usr/local/bin/python3
$ pip3 freeze | grep clip
pyperclip==1.5.24
$ python3 pw.py 
Traceback (most recent call last):
  File "pw.py", line 5, in <module>
    import pyperclip
ImportError: No module named 'pyperclip'

但是,在空闲状态下,代码运行良好,不会出现找不到模块的错误:

>>> ================================ RESTART ================================
>>> 
Password for email copied to clipboard
>>> 

有谁知道我的路径可能会发生什么情况,或者我可以在脚本中或从终端运行哪些其他命令来确定发生了什么?

下面的测试代码

#!/usr/local/bin/python3
# pw.py - an insecure password locker program

import sys
import pyperclip

PASSWORDS = {'email': 'F7minlBDDuvMJuxESSKHFhTxFtjVB6',
      'blog': 'VmALvQyKAxiVH5G8v01if1MLZF3sdt',
      'luggage': '12345'}

account = "email"

if account in PASSWORDS:
   pyperclip.copy(PASSWORDS[account])
   print ('Password for ' + account + ' copied to clipboard')
else:
   print ('There is no account named ' + account)

最佳答案

一些解决方案:

export PYTHONPATH=//Library/Frameworks/Python.framework/Versions3.4/lib/python3.4/site-packages

在终端中运行脚本之前

或 将其添加到您的代码中(在开头):

import sys;
sys.path.insert(0, "Library/Frameworks/Python.framework/Versions3.4/lib/python3.4/site-packages")

OR(最简单且最有效,因为您只需执行一次)

链接/usr/local/lib/python3.4/site-packages/Library/Frameworks/Python.framework/Versions3.4/lib/python3.4/site-包:

sudo ln -s /Library/Frameworks/Python.framework/Versions3.4/lib/python3.4/site-packages /usr/local/lib/python3.4/site-packages

关于python - 如何查找 python3 模块的位置并调试 ImportError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34078382/

相关文章:

python - 列表中的重复

python - 从文本文件执行管道命令

python - 椭圆曲线暴力破解

php - 为 Windows 系统的负载赋值

c++ - 使用 gdb 在 Eclipse 中调试简单 C++ 时出现 "No source available for main()"错误

python - selenium webriverwait 引发错误但没有描述

python - 我希望使用正则表达式来获取汉字句子的中间模式

python - CUDA 不支持边界检查

xcode - 多个命令为一个的 LLDB 别名

python-3.x - 添加未在ElasticSearch索引中显示的新文档