9

バックエンドデータベースとしてSQLiteを使用するPythonバイナリがあります。SQLiteのドキュメントとコードは、次の3つの環境変数のいずれかを設定すると機能することを示唆しています。

export TMP=/var/tmp/sqlite/
export TEMP=/var/tmp/sqlite/
export TEMPDIR=/var/tmp/sqlite/

Pythonバイナリを開始する直前にbashスクリプトで上記の変数をエクスポートすると、役に立ちません。

私が試したもう1つのオプションは、次putenv()の設定で呼び出すことですos.environ

os.environ['TMP'] = /var/tmp/sqlite/
os.environ['TEMP'] = /var/tmp/sqlite/
os.environ['TEMPDIR'] = /var/tmp/sqlite/

/var/tmp/sqlite上記のオプションはいずれも、SQLiteを一時ストアディレクトリとして使用するように説得するのに役立ちませんでした。動作した唯一のオプション(SQLiteのドキュメントによると非推奨)は、temp_store_directoryプラグマステートメントを設定することです。

PRAGMA temp_store_directory = '/egnyte/.work/sqlite_temp'

プラグマステートメントを使用することは私がしたい選択ではないので、他のトリックはありますか?

4

2 に答える 2

9

あなたが参照している環境変数は確かにsqliteが探すものですが、UNIXではなくWindowsです。

Unixでは、設定する必要のある環境変数はTMPDIR、ソースに示されているとおりです。

static const char *unixTempFileDir(void){
  static const char *azDirs[] = {
     0,
     0,
     "/var/tmp",
     "/usr/tmp",
     "/tmp",
     0        /* List terminator */
  };
  unsigned int i;
  struct stat buf;
  const char *zDir = 0;

  azDirs[0] = sqlite3_temp_directory;
  if( !azDirs[1] ) azDirs[1] = getenv("TMPDIR");
  for(i=0; i<sizeof(azDirs)/sizeof(azDirs[0]); zDir=azDirs[i++]){
    if( zDir==0 ) continue;
    if( osStat(zDir, &buf) ) continue;
    if( !S_ISDIR(buf.st_mode) ) continue;
    if( osAccess(zDir, 07) ) continue;
    break;
  }
  return zDir;
}
于 2012-05-01T09:41:47.493 に答える
4

バージョン3.8.1以降(2013年10月にリリース)では、のSQLITE_TMPDIR代わりに新しい環境変数を使用する方がクリーンTMPDIRです。後者はSQLite以外のUnixソフトウェアで使用されるためです。

リリースノートから:

UNIXで一時ファイルを保持するために使用されるディレクトリは、TMPDIR環境変数よりも優先されるSQLITE_TMPDIR環境変数を使用して設定できるようになりました。ただし、sqlite3_temp_directoryグローバル変数は、両方の環境変数よりも優先順位が高くなります。

于 2016-08-08T10:31:05.377 に答える