スッキリわかるPython入門 に関するよくある質問を紹介します。
JupyterLabが起動しません。
「スッキリわかるPython入門」の学習環境を構築するために、Anacondaをインストールした後、JupyterLabのLaunchボタンをクリックしてもJupyterLabが起動しないことがあります。
このような場合は、次の要因が考えられます。発生頻度の高い順に紹介しますので、順に確認してみてください。
ケース1:ブラウザにInternetExplorerを使用している
JupyterLabがサポートするブラウザは、公式ドキュメントにも掲載されていますが、主にFirefox・Chrome・Safariの最新バージョンです。IEを通常使うブラウザとして設定している場合、空白ページが表示されてしまい、起動することができません。
サポート対象のブラウザを導入し、通常使うブラウザとして設定後、再度起動を試してください。
ケース2:JupyterLabは背後で起動しているがブラウザが開かない
通常、Anaconda NavigatorでJupyterLabの「Launch」をクリックすると、ブラウザが自動的に開いてJupyterLabが利用可能な状態になります。しかし、何らかの理由でブラウザが自動で開かないという可能性が考えられます。お手元のブラウザを手動で起動し、JupyterLabへアクセスする次のURLをアドレスバーに入力すると、利用可能になる可能性があります。
ケース3:ネットワークに関するセキュリティ制限がかけられている
JupyterLabは、起動する際、自分自身のPCのポート8888番(失敗した場合は近傍のポート)にサーバーを立て、その後、ブラウザでそのポートにアクセスして利用します。しかし、セキュリティソフトなどでPC上ではサーバーの動作を許可しないなどの設定をされている場合には、サーバーを起動できない可能性が考えられます。
特に、企業や学校から支給されているPCの場合、セキュリティの関係からこのような設定をされていることがあります。
また、Windowsでは、初回起動時に「Pythonが接続を受け付けようとしていますが許可しますか?」などのメッセージが表示され、これに「いいえ」と答えた場合も、WindowsDefenderというOS標準の防御機構によって接続が禁止されます。
WindowsDefenderや導入しているセキュリティソフトの「パーソナルファイアウォール機能」などの設定項目を確認して、Pythonがサーバー動作することを禁止する設定になっていないかを確認ください。
ケース4:導入したAnacondaが壊れている
インストールしたAnacondaが何らかの理由で壊れているというケースです。パッケージ管理ツールのpipなどと組み合わせて利用した場合、壊れることがあるという事象を確認しています。この場合は、一度Anacondaをアンインストールして再度インストールをした上で、起動を試してださい。
Windows環境のJupyterLabでファイルに書き込むと、エラーが出てファイルを開けません。
「スッキリわかるPython入門」第7章に掲載されているファイル書き込みのコードをWindows環境のJupyterLabで実行すると、「diary.txt is not UTF-8 encoded」などと表示されて開けないことがあります。
これは、JupyterLabはUTF−8という文字コードを前提としているものの、開こうとしているファイルがそれ以外の文字コードで書き込まれたために発生するエラーです。
ファイルを開くopen関数は、原則として実行環境のOSと同じ文字コードを使ってファイルに書き込みます。たとえば、古いWindowsを利用している場合、通常はUTF-8とは異なるCP932というShift_JIS系統の文字コードでファイルが作成されます。
対応方法は2つあります。どちらかの方法で解決を試してみてください。
方法1:「Shift_JIS」で書き「Shift_JIS」で読む
1つ目は、JupyterLabではなく別のエディタでファイルを開く方法です。
Windowsのメモ帳などのテキストエディタで開くと、内容を確認できます。ただし、Shift_JISで解釈できないエディタでは、文字化けが発生する可能性があります。
方法2:「UTFー8」で書き「UTFー8」で読む
2つ目は、文字コードを指定してファイルに書き込む方法です。
open関数の引数encodingに使用する文字コードを指定します。ファイルにはUTF−8で書き込まれるため、そのままJupyterLabでファイルを開くことができます。
# open関数で使用する文字コードを指定する(UTF-8の場合)
file = open('diary.txt', 'a', encoding='utf-8')