MAMPでPython3を使用する
MAMPとPythonに苦戦中。
前回の記事で、MAMPのphthonを使った方が良さそうと書いた。
コードの先頭行は
#!/usr/bin/env python3
ではなく、
#!/usr/bin/env /Applications/MAMP/Library/bin/python
にした方が良いと。
MAMPに同梱された /Applications/MAMP/Library/bin/python はバージョン 2.7だった。
#!/usr/bin/env /Users/ユーザ名/.pyenv/shims/python3
として、Pythonバージョン3を使うために、チャレンジする。
MAMPが示すコード例(Examples)は下記。
import mysql.connector
config = {
'user': 'root',
'password': 'root',
'host': 'localhost',
'unix_socket': '/Applications/MAMP/tmp/mysql/mysql.sock',
'database': 'test',
'raise_on_warnings': True
}
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor(dictionary=True)
cursor.execute('SELECT `id`, `name` FROM `test`')
results = cursor.fetchall()
for row in results:
id = row['id']
title = row['name']
print '%s | %s' % (id, title)
cnx.close()
テーブル名は test ではなく table1として作成しているのでそこは変えるとして、printの行で SyntaxError: invalid syntax: が出た。
Pythonバージョン2では、
print “Hello”
で良かったものが、Pythonバージョン3では、カッコをつけないとダメになったようだ。
print(“Hello”)
よって、コードを書き換えることで、このエラーは消えた。
print ‘%s | %s’ % (id, title)
↓
print(‘%s | %s’ % (id, title))
次のエラーは
import mysql.connector: /Applications/MAMP/htdocs/mysql_brew.py
ModuleNotFoundError: No module named ‘mysql’: /Applications/MAMP/htdocs/mysql_brew.py
ライブラリのmysqlがないと思われる。
$ pip3 list
で、インストール済みのパッケージ一覧を確認。
pipはPythonのパッケージ管理ソフトらしい。
$ pip3 search mysql
で検索を試みるが、
RuntimeError: PyPI no longer supports ‘pip search’ (or XML-RPC search). Please use https://pypi.org/search (via a browser) instead.
searchは使えないんですって。
https://pypi.org/search で検索。
たくさん出てきてどれかわからないが、入れてみる
$ pip3 install mysql-connector
エラーがなくなった。
なんとか、MAMPでPython3が使えるようになった。
ちなみに、コード内でPythonバージョンを表示する方法は、
import sys
print("Content-Type: text/html\n\n")
print(sys.version)
print("<br>")
そして、前回出ていたレコード内に日本語が混じっていたときのエラー UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx は出なくなった。Python バージョン3では解消したようだ。
ただし、文字コードをきちんとしないとブラウザ上では文字化けしたため、ちゃんとhtmlにしてみた。
最終的には、下記のコードとした。Hello Worldは関係ないけど。
#!/usr/bin/env /Users/ユーザ名/.pyenv/shims/python3
import sys
print("Content-Type: text/html\n\n")
print("<html>")
print("<head>")
print("<meta charset=\"utf-8\">")
print("<title>Hello World</title>")
print("</head>")
print("<body>")
print("<h1>Hello World!</h1>")
print(sys.version)
print("<br>")
import mysql.connector
config = {
'user': 'root',
'password': 'root',
'host': 'localhost',
'unix_socket': '/Applications/MAMP/tmp/mysql/mysql.sock',
'database': 'test',
'raise_on_warnings': True
}
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor(dictionary=True)
cursor.execute('SELECT `id`, `name` FROM `table1`')
results = cursor.fetchall()
for row in results:
id = row['id']
title = row['name']
print('%s | %s' % (id, title))
cnx.close()
print("</body>")
print("</html>")
まだまだ、色々と問題がありそうだなー。