2013-02-21 7 views

risposta

25

Eclipse utilizza l'analisi statica dei moduli per impostazione predefinita. flask.ext crea dinamicamente l'elenco di importazione. Per forzare l'analisi dinamica utilizzando la shell Python, aggiungere flask.ext all'elenco delle forzature forzate.

Vai a Preferences -> PyDev -> Interpreters -> Python Interpreter. Seleziona il tuo interprete, vai alla scheda Forced Builtins. Fare clic su New... e immettere flask.ext.

Ciò richiede PyDev per analizzare in modo forzato il modulo attraverso una shell.

Per ulteriori dettagli, vedere PyDev manual.

+0

Questo sembra molto promettente. Nel frattempo sono passato a PyCharm, quindi non posso (e non voglio) testarlo da solo. Tuttavia, contrassegnerò questa domanda come risolta, dal momento che stai facendo riferimento alla documentazione ufficiale. – floqqi

+3

Questo risolve le importazioni non risolte per tutti i moduli flask.ext che ho installato. L'aggiunta dei moduli Flask al PATH di Python NON ha risolto le importazioni non risolte. –

+0

Sembra promettente, ma non ha funzionato per me in LiClipse 3.6.0 su Mac OS X 10.11. Forse un bug in PyDev come in bundle in LiClipse? –

0

touch creerà un file vuoto se non esiste o aggiorna il tempo di modifica del file se esiste.

A tale scopo, echo > /site-packages/flashext/__init__.py a una riga di comando dovrebbe essere sufficiente. (Il file non sarà vuoto, ma contiene solo una singola riga che è semanticamente equivalente a Python).

+0

Grazie, ma dopo aver ripristinato il mio interprete python in eclissi il problema esiste ancora .. – floqqi

1

Sono anche alle prese con questo e il problema sembra essere nel modo in cui Flask importa le estensioni. Se apri il file flask/ext/__init__.py vedrai che usa l'importatore. Non credo che PyDev piace questo molto, quindi ho modificato questo file con le importazioni fisse:

import flask_login as login 
import flask_sqlalchemy as sqlalchemy 
import flask_wtf as wtf 

def setup(): 
    from ..exthook import ExtensionImporter 
    importer = ExtensionImporter(['flask_%s', 'flaskext.%s'], __name__) 
    importer.install() 


setup() 
del setup 

Ho anche scoperto che le importazioni Flask-SQLAlchemy rotto anche, in modo invece di fare db.Column come spiegato in la documentazione, utilizzare direttamente l'importazione sqlalchemy, ovvero from sqlalchemy import Column, ForeignKey

0

Se il progetto è in un ambiente virtuale e si desidera aggiungere il progetto in eclissi in modo che il progetto utilizzi le librerie installate nell'ambiente virtuale, è necessario seguire i seguenti passaggi.

passo 1: diciamo che il percorso assoluto per il vostro ambiente virtuale è: C:\Users\sadegh\Desktop\flask_eclipse\fe\venv

The content of venv folder

andare a window->preferences->PyDev->interpretors->Python Interpretor nella directory Scripts, c'è python.exe enter image description here che è l'interprete Python che è stato assegnato a questo ambiente virtuale. Questo eseguibile sarà il nuovo interprete python che aggiungeremo ad eclissi.

Step2: Vai alla window->preferences->PyDev->Interpreters->Python Interpreter enter image description here

Nel riquadro di destra si vedrà questo: enter image description here

clic sul nuovo pulsante allora questa finestra pop-up: enter image description here

scrivere niente vuoi nel campo Interpreter Name e scrivi il percorso assoluto del file python.exe menzionato nel passaggio 1 nello Interpreter Executable campo

dopo aver cliccato OK questo pop-up: enter image description here

selezionare tutti gli elementi quindi fare clic su OK

Fase 3: selezionare l'interprete appena aggiunto nel riquadro sopra, quindi nel riquadro qui sotto Vai a Scheda Forced Builtin e fare clic sul nuovo pulsante sul lato destro di questo riquadro sottostante.

enter image description here

e nella finestra che si apre in scrittura flask.ext.

step4: tutto è impostato ora:

se si desidera avviare un nuovo progetto: quando si crea un nuovo PyDev Project selezionare il nuovo interprete che abbiamo creato come interprete di questo progetto. enter image description here

se si desidera convertire un progetto esistente a un progetto pallone su l'ambiente virtuale fare clic destro sul progetto e andare alle proprietà ed in PyDev-Interpreter/Grammar cambiamento l'Interprete al nuovo interprete che abbiamo creato.

nota: Se si desidera che l'eclissi per eseguire il server per voi in un ambiente virtuale è possibile eseguire il server all'interno del codice che contiene l'istanza Flask() in questo modo:

if __name__ == '__main__': #here i assume you have put this code in a file that  
    app.run() #contains variable "app", which contains the instance of #Flask(__main__) 
+0

Questo aggiungerà l'interprete a livello globale per tutti i progetti, anche se l'interprete in questione sarebbe un interprete specifico del progetto. C'è un modo per aggiungere l'interprete in modo che sia solo specifico del progetto? – FluxIX