繁体   English   中英

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

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

我在MacbookPro(10.9.5)上使用Python 3.4.2。 该代码来自Al Sweigart的《用Python自动化无聊的东西》尝试在python3中运行脚本时出现一个奇怪的错误。 代码在下面,但我不认为这是问题所在。 这可能是模块路径问题,但不能从我的调试中100%确定。

我可以在Idle中运行代码,但不能从cmd行中运行代码,而是使用shebang或python3“脚本名称”运行。

我们可以在下面看到,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'

但是,在空闲状态下,该代码可以正常运行(没有发现模块错误):

>>> ================================ 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")

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

/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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM