2012-05-01 7 views
7

सेट करना मेरे पास एक पाइथन बाइनरी है जो SQLite का बैकएंड डेटाबेस के रूप में उपयोग करती है। SQLite के प्रलेखन और कोड पता चलता है कि निम्नलिखित 3 वातावरण चर के किसी भी स्थापित करने से काम करना चाहिए:स्क्लाइट अस्थायी स्टोर निर्देशिका

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

अगर मैं अपने bash स्क्रिप्ट बस से पहले मैं अपने अजगर द्विआधारी शुरू में ऊपर चर निर्यात करते हैं, यह मदद नहीं करता है।

एक अन्य विकल्प मैंने कोशिश की os.environ की स्थापना करके putenv() बुला रहा है:

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 बयान स्थापित कर रही है:

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

pragma कथन का उपयोग पसंद मैं करना चाहते हैं नहीं है के बाद से, क्या कोई अन्य चाल है?

उत्तर

7

पर्यावरण चर जो आप संदर्भित कर रहे हैं वास्तव में स्क्लाइट दिखता है लेकिन विंडोज़ में, यूनिक्स नहीं।

यूनिक्स में, वातावरण चर आप स्थापित करने की आवश्यकता 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; 
} 
1

संस्करण 3.8.1+ (अक्टूबर 2013 को जारी) के लिए, यह नई SQLITE_TMPDIR वातावरण चर का उपयोग करने के क्लीनर है TMPDIR के बजाय, बाद में SQLite के अलावा यूनिक्स सॉफ़्टवेयर द्वारा उपयोग किया जाता है।

release notes से

:

यूनिक्स पर अस्थायी फ़ाइलों को पकड़ इस्तेमाल निर्देशिका अब SQLITE_TMPDIR वातावरण चर, जो TMPDIR वातावरण चर पर पूर्वता लेता है का उपयोग कर सेट किया जा सकता। हालांकि, sqlite3_temp_directory ग्लोबल वैरिएबल में अभी भी पर्यावरण चर दोनों की तुलना में अधिक प्राथमिकता है।