Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Веб-разработка и фреймворки > ImportError: No module named 'MySQLdb'


Автор: Bulat 14.7.2016, 08:29
С Питоном "играюсь" недавно, поэтому нуб! Как исправить багу, которая появляется при запуске из Apache?

error.log : 
Код

Traceback (most recent call last):
  File "/var/www/Python/cgi-bin/next.py", line 3, in <module>
    import db;
  File "/var/www/Python/cgi-bin/db.py", line 3, in <module>
    import MySQLdb
ImportError: No module named 'MySQLdb'




next.py
Код

import db;

database = db.connectDB()

cursor = db.getCursor(database)

print("Content-type: text/html")

print()

## database query
sql = """SELECT id, login FROM users"""
## execute query
cursor.execute(sql)

## fetch query result
data =  cursor.fetchall()
## get query lines
for rec in data:
    ## get data from lines
    id, login = rec
    ## print information
    print (id, '\t', login, '\n')

print('<h1>Hello world!</h1><br/><a href="/cgi-bin/hello.py">back</a>')



db.py
Код

#!/usr/bin/python3

import MySQLdb
#import string

config = {
  'user': '***',
  'passwd': '***',
  'host': '127.0.0.1',
  'db': 'web'
}

def connectDB() :
  db = MySQLdb.connect(**config)
  return db

def getCursor(db) :
  cursor = db.cursor()
  return cursor

## database query
#sql = """SELECT id, login FROM users"""
## execute query
#cursor.execute(sql)

## fetch query result
#data =  cursor.fetchall()
## get query lines
#for rec in data:
    ## get data from lines
#    id, login = rec
    ## print information
#    print id, "\t", login, "\n"

#db.close() 


При запуске из консоли - все работает как часы.  smile 

Автор: samssrus 15.7.2016, 08:23
для начала можно добавить __init__.py в папку с файлами проекта:
Код

__all__ = ["next","db"]

Это должно решить первую часть проблемы.

Apache на той же машине запущен?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/ImportError-No-module-named-MySQLdb-id57872361ae20158c228b4567#findElement_E7045_5788735dae2015a5267c7aae_0

Автор: Bulat 15.7.2016, 08:38
Цитата(samssrus @ 15.7.2016,  08:23)
для начала можно добавить __init__.py в папку с файлами проекта:
Код

__all__ = ["next","db"]

Это должно решить первую часть проблемы.

Apache на той же машине запущен?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/ImportError-No-module-named-MySQLdb-id57872361ae20158c228b4567#findElement_E7045_5788735dae2015a5267c7aae_0

Добавил файл с этой одной строчкой - ничего не изменилось.

Да, апач запущен там же!

Автор: samssrus 16.7.2016, 09:12
в некоторых местах написано, что MySQLdb не хочет работать с python 3.
воспроизвести в точности Вашу ошибку мне не удается.
но...
еще можно изменить import и посмотреть внимательнее на что ругается.
Код

import sys
try:
    import db
except ImportError as e:
    sys.exit("Ошибка импорта. %s" % e)

я дошел до того, что у меня ругается он в действительности на отсутствие '_mysql'.

В конечном счете, когда возникает ошибка импорта - значит не видны пути. Бороться с этим очень муторно. Поэтому, есть такая удобная штука как Anaconda (https://www.continuum.io/downloads). Очень советую пользоваться ей при программировании на python.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/ImportError-No-module-named-MySQLdb-id57872361ae20158c228b4567#findElement_E7045_5789d066ae201584577c73c3_0

Автор: Bulat 18.7.2016, 07:43
Цитата(samssrus @  16.7.2016,  09:12 Найти цитируемый пост)
в некоторых местах написано, что MySQLdb не хочет работать с python 3.


Брехня, из консоли у меня все прекрасно работает. Проблема возникает, когда я запускаю все это в апач, т.е. набираю в браузере соответствующую ссылку!

Цитата(samssrus @  16.7.2016,  09:12 Найти цитируемый пост)
я дошел до того, что у меня ругается он в действительности на отсутствие '_mysql'.

При запуске из консоли он вообще ни на что не ругается!

Цитата(samssrus @  16.7.2016,  09:12 Найти цитируемый пост)
В конечном счете, когда возникает ошибка импорта - значит не видны пути. Бороться с этим очень муторно. 

Хоть и муторно, но надо!  smile 

Автор: Bulat 18.7.2016, 09:13
После целого ряда экспериментов, таки удалось заставить все работать! Правда разметку еще нужно править, но сами скрипты отрабатывают как часы!

Если на будущее кто столкнется, лично у меня проблема решилась следующим образом:

1. Консоль. При запуске из-под консоли я запускал python next.py - и это работало. Но если я запускал python3 next.py - у меня появлялась та же ошибка что и из-под апача!

2. Изменив во всех скриптах первую строчку с #!/usr/bin/python3 на #!/usr/bin/python - у меня перестала появлятся ошибка импорта модуля!

3. При первой строчке в скрипте: #!/usr/bin/python3 строка: print("Content-type: text/html") работает.

Но при первой строчке: #!/usr/bin/python обязательно нужно: print("Content-type: text/html\n\n")

У меня по-крайней мере так заработало!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)