さて、前回は、プロジェクト作成、そして、実際に動作確認までをした。公式チュートリアルでは、最初に簡単な投票システムを作る。
スポンサードリンク
Pollsアプリケーションを作る
さて、アプリケーションとやらをどこに作ればいいのか?
チュートリアルでは「manage.pyと同じディレクトリに入って以下のコマンドを実行」とある。
python manage.py startapp polls
前回、mysiteプロジェクトを作成した時、manage.pyというファイルが自動作成されていた。つまり、mysiteフォルダの下 ( サブフォルダも ” mysite ” なのでややこしいが、ルートフォルダの下だ。)
カレントをルートフォルダに移動し、コマンドを実行・・・おっと! インポートエラーの表示が・・・
C:\>CD C:\django_project\mysite C:\django_project\mysite>python manage.py startapp polls Traceback (most recent call last): File "manage.py", line 11, in main from django.core.management import execute_from_command_line ModuleNotFoundError: No module named 'django' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "manage.py", line 22, in main() File "manage.py", line 13, in main raise ImportError( ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment? C:\django_project\mysite>
エラーの原因
原因は何となく分っていた。入力したコマンドは、pythonのバージョン指定が無いため、デフォルト指定されていたPython3.8 に対して実行されている。しかし、3.8にはDjangoがインストールされていないため、インポートエラーになっている。
Windowsのシステム環境変数 ” path ” に記録されたPython3.8へのパスを3.9に書き換えた。プロンプトで ” python ” と入力すると、3.9が起動。これでデフォルトが3.9に変更された。
C:\>python Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
もう一度、アプリケーション作成コマンドを実行。エラー表示は出ない。
C:\>CD C:\django_project\mysite C:\django_project\mysite>python manage.py startapp polls C:\django_project\mysite>
おお、ルートフォルダの下に ” polls ” フォルダが作成されている。これがアプリケーションだな。
pollsフォルダの中身は・・・ふむふむ、段々とフレームワークらしくなってきましたね。
複数のPythonを使っている場合の注意点
今回、インポートエラーで発覚したが、開発環境に複数バージョンのPythonが存在する場合、入力コマンドがどのPythonに対して実行されるのか、整理しておいた方がいい。
Python3.8にもDjangoがインストールされている場合、Python3.9にインストールしたDjangoを呼び出しているつもりでも、実際は3.8の方を呼び出しており、表面上何事もなく動いていることもある。
もし、システム環境変数を触りたくないという場合は、アプリケーション作成コマンドは、ランチャー経由のバージョン指定で次のように入力するといい。
py -3.9 manage.py startapp polls
Django Webアプリ開発実装ハンドブック チーム・カルポ (著)
スポンサードリンク:Amazon
Comments are closed, but trackbacks and pingbacks are open.