如何找到 python3 的模块位置并调试 ImportError

How to find the location of modules for python3 and debug an ImportError

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

我可以 运行 Idle 中的代码,但我不能 运行 来自 cmd 行的代码,运行 shebang 或 python3 "name of script" .

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

我 运行 来自我的终端:

$ 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'

然而,在 Idle 中,代码 运行 没问题 w/o 给出模块未找到的错误:

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

有谁知道我的路径可能发生了什么,或者我可以在我的脚本或终端中 运行 其他什么 cmd 来确定发生了什么?

下面是测试代码

#!/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")

或(最简单、最有效,因为你只需要这样做一次)

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

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