2013-10-31 23 views
11

Sto riscontrando un problema nel far corrispondere il mio ambiente Pycharm con l'ambiente che ho sulla riga di comando. Recentemente ho rimosso python e reinstallato tramite home brew. Il pitone nel mio percorso è rivolto a /usr/local/bin/python ho aggiunto PATH=/usr/local/bin:$PATH all'inizio del mio file .bash_profile e posso eseguire il seguente codice di bene nel interperter sulla riga di comando. Tuttavia, quando aggiungo /usr/local/bin/python agli interpreti pitone progetto ed eseguire il codice qui sotto ho l'errore attributo. Qualcuno può far luce su come posso far usare a Pycharm lo stesso ambiente della mia linea di comando?Ambiente Pycharm diverso dalla riga di comando

import sqlite3 
db = "mydb.db" 
conn = sqlite3.connect(db) 
conn.enable_load_extension(True) 

AttributeError: 'sqlite3.Connection' object has no attribute 'enable_load_extension'

+2

Fare riferimento a http://stackoverflow.com/q/135688/104891. Le app della GUI non leggono il tuo '.bash_profile'. – CrazyCoder

+0

ugh ... sembra che ogni versione di OS X gestisca diversamente ... – CLJ

risposta

15

.bash_profile viene letto da bash (la vostra linea di comando interprete) solo. Tuttavia, se si desidera mantenere l'ambiente bash per PyCharm c'è un vero modo in cui Linux.

Esegui PyCharm dalla riga di comando (da bash). Quindi le variabili d'ambiente saranno ereditate da bash a pycharm. Leggi $man environ per informazioni sul processo di successione ambiente Linux. Quindi, tutto ciò che serve è solo lanciare ${PATH_TO_PYCHARM}/bin/pycharm.sh da linea di comando. Oppure crea un launcher che invoca bash per il lancio di PyCharm.

Questo è tutto! Spero che funzioni per te.

2

Un altro approccio è quello di ottenere il tuo script di impostazione variabili ambientali (ad esempio .bash_profile) con l'aggiunta di una linea . /path/to/script in PY_CHARM_INSTALL_DIR/bin/pycharm.sh.

Dopo di che è possibile eseguire pycharm utilizzando quick-lunch o qualsiasi altra cosa e le variabili saranno lì.

1

Sfortunatamente in Mac OS X, le applicazioni grafiche non ereditano la configurazione di .bash_profile. Sto postando la soluzione aggiornata per OSX 10.11 su come impostare le variabili di ambiente a livello GUI:

C'è un repo utile chiamato osx-env-sync che legge ~/.bash_profile e imposta le variabili di ambiente esportate in esso per applicazioni GUI. Dopo la copia 2 file e l'esecuzione di 2 altri comandi descritti nella pagina GitHub, PyCharm può essere lanciato in avvio rapido con le variabili globali disponibili come definito nel bash_profile.

This collegamento fornisce ulteriori informazioni di base.

3

Se si utilizza la versione PyCharm 2.016,3 e avete notato che il vostro PyCharm Terminal non fornire lo stesso ambiente predefinito come MacOs Terminal ambiente è, si tratta di un bug che dovrebbe essere risolto nel 2016/03/01 - ogni volta rilascia. Nel frattempo, il seguente è una soluzione che dovrebbe 'default' tutti i vostri progetti PyCharm indietro un altro more MacOS-Terminal come PyCharm-Terminal:

Creare un file ~/.bashrc con il seguente contenuto: source /etc/bashrc source /etc/bashrc_Apple_Terminal source ~/.bash_profile

Questo dovrebbe impostare il Terminal PyCharm (sessione di bash interattiva) e renderlo simile al Terminal MacOS (login sessione di bash).Una volta che JetBrains ha aggiornato e rilasciato 2016.3.1, ti consiglio di eliminare questo file ~/.bashrc. Spero che questo ci riduca tutti alla normalità.

+1

Sfortunatamente, questo bug esiste ancora a partire dal 2017.1.2 –

1

Edit: chiarendo che questa soluzione è per PyCharm 2016.3.0

E 'davvero consigliabile che basta eseguire il seguente comando

source ~/.bash_profile 

all'inizio di ogni sessione di terminale fino 2016/03/01 è rilasciato.

Tuttavia, esiste un rimedio per questo errore. Lo script del terminale sembra avere 2 nomi di funzione invertiti, quindi devono essere rinominati.

Per eseguire questa operazione, è necessario modificare lo script del plug-in del terminale dell'app, che NON è consigliato.

Su MacOSX, questo si trova qui se PyCharm è installato a livello mondiale (non sono sicuro dove diversamente):

cd /Applications/PyCharm.app/Contents/plugins/terminal 

Modificare il file 'jediterm-bash.in' con il processore di testo di vostra scelta. Se dovrebbe essere simile a questo:

#!/bin/bash 

function load_login_configs { 
    #  When bash is invoked as an interactive login shell, or as a non-interac- 
    #  tive shell with the --login option, it first reads and executes commands 
    #  from the file /etc/profile, if that file exists. After reading that 
    #  file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in 
    #  that order, and reads and executes commands from the first one that 
    #  exists and is readable. 

    if [ -f /etc/profile ]; then 
    source /etc/profile 
    fi 

    if [ -f ~/.bash_profile ]; then 
    source ~/.bash_profile 
    else 
    if [ -f ~/.bash_login ]; then 
     source ~/.bash_login 
    else 
     if [ -f ~/.profile ]; then 
      source ~/.profile 
     fi 
    fi 
    fi 
} 

function load_interactive_configs { 
    if [ -f ~/.bashrc ]; then 
     source ~/.bashrc 
    fi 
} 

if [ `shopt -q login_shell` ]; then 
    load_login_configs 
fi 

load_interactive_configs 

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving 
bind '"\e\e[C":forward-word' 
bind '"\e\e[D": backward-word' 
bind '"\e\O[C":forward-word' 
bind '"\e\O[D": backward-word' 

function generate_command_executed_sequence() { 
    printf '\e\7' 
} 

export -f generate_command_executed_sequence 


#generate escape sequence after command is executed to notify jediterm emulator 
trap "generate_command_executed_sequence" DEBUG 

if [ -n "$JEDITERM_USER_RCFILE" ] 
then 
    source $JEDITERM_USER_RCFILE 
fi 

if [ -n "$JEDITERM_SOURCE" ] 
then 
    source $JEDITERM_SOURCE 
fi 

Rinominare le seguenti funzioni:

load_login_configs =>load_interactive_configs

load_interactive_configs =>load_login_configs

Lo script finale dovrebbe essere:

#!/bin/bash 

function load_interactive_configs { 
    #  When bash is invoked as an interactive login shell, or as a non-interac- 
    #  tive shell with the --login option, it first reads and executes commands 
    #  from the file /etc/profile, if that file exists. After reading that 
    #  file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in 
    #  that order, and reads and executes commands from the first one that 
    #  exists and is readable. 

    if [ -f /etc/profile ]; then 
    source /etc/profile 
    fi 

    if [ -f ~/.bash_profile ]; then 
    source ~/.bash_profile 
    else 
    if [ -f ~/.bash_login ]; then 
     source ~/.bash_login 
    else 
     if [ -f ~/.profile ]; then 
      source ~/.profile 
     fi 
    fi 
    fi 
} 

function load_login_configs { 
    if [ -f ~/.bashrc ]; then 
     source ~/.bashrc 
    fi 
} 

if [ `shopt -q login_shell` ]; then 
    load_login_configs 
fi 

load_interactive_configs 

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving 
bind '"\e\e[C":forward-word' 
bind '"\e\e[D": backward-word' 
bind '"\e\O[C":forward-word' 
bind '"\e\O[D": backward-word' 

function generate_command_executed_sequence() { 
    printf '\e\7' 
} 

export -f generate_command_executed_sequence 


#generate escape sequence after command is executed to notify jediterm emulator 
trap "generate_command_executed_sequence" DEBUG 

if [ -n "$JEDITERM_USER_RCFILE" ] 
then 
    source $JEDITERM_USER_RCFILE 
fi 

if [ -n "$JEDITERM_SOURCE" ] 
then 
    source $JEDITERM_SOURCE 
fi 

Salva e riavvia PyCharm e dovresti essere pronto.

0

per me quello che ha funzionato non era eseguire pycharm dalle applicazioni ma da un terminale che utilizza chram. poi ha ereditato tutte le Vars env e percorsi