2015-12-03 2 views
1

Я использую Python 3.4.2 на MacbookPro (10.9.5). Код от Automate the Boring Stuff with Python by Al Sweigart У меня есть странная ошибка при попытке запустить скрипт в python3. Код ниже, но я не думаю, что это проблема. Это может быть проблема с модулем, но не на 100% от моей отладки.Как найти расположение модулей для python3 и отладить ImportError

Я могу запустить код в 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' 

Однако в Idle, код работает нормально, без давая ошибку модуля не найден:

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

Кто-нибудь знает, что может происходит с моим путем или с другими cmds, которые я могу запустить в своем сценарии или с терминала, чтобы определить, что происходит?

код теста

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

Есть свой сценарий печати sys.path и проверьте эти папки. –

+0

@SamuelLittley - thx для наконечника. он смотрит на 2 разных местоположения, но я не знаю, почему. Он смотрит на библиотеку/Frameworks/Python.framework/Версии 3.4/lib/python3.4/site-packages (рабочий/Idle выглядит здесь) и /usr/local/lib/python3.4/site-packages (не работает и выглядит пустой. Терминал выглядит здесь). Можете ли вы рассказать мне, как заставить python3 с терминала смотреть в первых местах? – Classified

ответ

2

Некоторые из решений:

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-packages:

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

Спасибо. Могу ли я использовать переменную среды PYTHONPATH, если у меня установлены оба python2 и 3? Я еще не пробовал b/c. Боюсь, я могу испортить больше, чем исправлять, так как у меня установлены обе версии. – Classified

+1

Тогда попробуйте последнее решение :). – minhhn2910

Смежные вопросы