2012-06-04 4 views
9

私はDjangoとPython(一般的なプログラミング)を学ぶ過程にあります。簡単にするために、私はデータベースとしてsqlite3を使用していますが、Djangoなどのチュートリアルを行っています。Djangoデータベースパス(sqlite3用)を "クロスプラットフォーム"にすることはできますか?

私はその時点でどこにいるかによって、マルチプラットフォームのユーザー(Mac OS、Windows、Linux)です。だから、私がやったことは、Dropboxにプログラミングプロジェクトを入れて、どこからでも同じコードを作業できるようにすることです。

問題は、特定のプロジェクトのsettings.pyファイルで、私はそうのようなデータベースのパスを指定し、ということである:

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.sqlite3',        # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
    'NAME': 'C:/Users/David/Dropbox/programming/mysite/database',  # Or path to database file if using sqlite3. 

を...しかし、私は明らかに、MacOSのまたはLinuxを使用していたときにC:/チョーク。私は誰かがこれに簡単な治療法の提案をしているのだろうかと思っていました。もちろん、私がそれをやり遂げることができる方法の1つは、MySQLなどを介して自分のウェブサーバにリモートでデータベースを設定することですが、if文などの簡単な方法があると思いました。

+0

OT:どのようにしてクロスプラットフォームで作業することができますか?あなたが使用したすべてのマシンにOS固有のPythonをインストールしましたか?すべてのマシンにvirtualenvをセットアップしましたか? thx – Bakaburg

答えて

0

ない優れたソリューションが、あなたが同じように、あなたが実行しているものプラットフォームをテストできます。relative paths in settings.pyを使用して

import platform 
'NAME': 'C:/Users/David/Dropbox/programming/mysite/database' if platform.system() == 'Windows' else '<Linux path to sqlite>' 
+0

乾杯!ヘルプをよろしくお願いいたします。 –

22

は多くのことで、ベストプラクティスと見なされるほど一般的です。このようなものが助けになるかもしれません。

from os.path import dirname, join 

PROJECT_DIR = dirname(__file__) 

DATABASES = { 
    # ... 
    'NAME': join(PROJECT_DIR, 'your_db_name.db'), 
    # ... 
} 
+0

多くのありがとう。 :) –

2

私は適切な場合は上記の両方の方法を使用します。相対パスは私のすべてのプロジェクトに含まれていますが、プラットフォーム検出が必要なものもあります。

第3の方法は、バージョンコントロール外のlocal_settingsファイルをメイン設定ファイルにインポートすることです。 from local_settings import * - このローカル設定ファイルは、すべての環境で異なる場合があります。あなたが好奇心を得たい場合は、あなたに合った環境検出を行い、適切なwindows、osx、またはlinuxファイルをインポートすることができます。

この方法はきれいで、すべての環境設定でsettings.pyが乱雑にならないため、3つの環境がある場合にはおそらく好ましい方法です。私は個人的に、このようなS3、デバッグツールバーを有効にするデータベースの選択(時々、私は簡単にリセットするために、ブランクのsqliteのDBをしたい)、地方開発のためのファイルとしてそれぞれの環境のためにも、より細かい設定ファイルを持っている

Django Local Settings

(テンプレートデバッグ、サムネイルデバッグなど)、オン/オフのキャッシングを使用して、プロダクション、ステージング、さまざまなレベルのステージングデバッグ、およびローカル開発に必要なものをミックスして対応させることができます。

+0

あなたがリンクしたその質問への受け入れられた答えは、また、try catchの 'from local_settings import *'をラップしておくことです。 http://stackoverflow.com/a/4909964/169121 – istruble

+0

非常に助けに感謝:) –

関連する問題