2013-01-31 37 views
15

Ho scaricato Python for .NET.
All'interno dello zip è clr.pyd, nPython.exe, Python.Runtime.dll e 2 file di database di debug.
Metto clr.pyd e Python.Runtime.dll nella mia directory python DLL C: \ Python27 \ DLLs pensando che questo sia tutto ciò che è necessario per l'installazione. Ho poi apro la GUI di Python e il tipo di importazione CLR e ottengo:Come installare Python per .NET su Windows

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    import clr 
SystemError: dynamic module not initialized properly 

Nuovo per Python, ma non NET e voglio usare il CPython e non IronPython. Cosa mi manca in questa installazione? Il readme di Python per .NET dice che c'è un'installazione per il pacchetto di Windows ma tutto quello che ho trovato è stato il file zip.

+0

"python.net" non intendi ironpython? –

+5

Io no. IronPython è il proprio eseguibile realizzato da MS. Voglio usare il "normale" Python ma la libreria .NET è esposta ad esso. Era la mia comprensione Python.NET fa questo. – user441521

+1

La tua comprensione è corretta. Mi piace spiegarlo come IronPython è un env .Net che contiene Python. Python .Net consente a Python di contenere .Net – bc3tech

risposta

5

Il modo corretto per installare Python per .NET è quello di copiare TUTTI i file da .zip nella directory che contiene il file .py.

Poi, se si esegue

python yourfilename.py 

si dovrebbe trovare che la sua dichiarazione "import CLR" funziona. Ho provato questo usando python 2.7 x86 e pythonnet-2.0-Beta0-clr4.0_140_py27_UCS2_x86.zip

Sono stato in grado di replicare il tuo errore copiando solo il file clr.pyd nella mia directory di lavoro.

Si noti che non sono riuscito a fare questo lavoro in Python 3.3 x86 o Python 3.3 x64

+0

Credo che il problema non sia correlato alla copia su nessuno degli altri file. – Jonno

+2

Funziona perché sys.path include la directory corrente, ma trasportare pythonnet con ogni script .py non è molto flessibile e richiede un incubo di manutenzione. – denfromufa

2

non so il motivo per cui ancora, ma l'unico modo ho potuto farlo funzionare è quello di copiare quei 3 file nella C: \ Python27 \ directory direttamente.

13

Il modo corretto per caricare CLR in Python è come questo:

  1. assicurarsi che nessun roba vecchia viene lasciato da Python.NET nella cartella di installazione di Python (ad esempio C: \ Python27). Nel mio caso avevo legacy clr.pyd in una delle cartelle. Nota che pip per alcune vecchie versioni non ha rimosso tutte le parti di Python.NET.
  2. aggiungere i directory con i file Python.NET (clr.pyd e Python.Runtime.dll) per sys.path

Ora è possibile caricare CLR il modo più flessibile, senza nemmeno l'installazione a directory Python!

È possibile compilare dai sorgenti su GitHub:

pip install git+https://github.com/pythonnet/pythonnet 

o utilizzare ruote/installatori di Windows da Christoph Gohlke:

http://www.lfd.uci.edu/~gohlke/pythonlibs/#pythonnet

pacchetto PyPI è disponibile per l'installazione da pip:

https://pypi.python.org/pypi/pythonnet

Più opzioni di installazione come finestra mobile, WinPython, Conda, NuGet, choco sono elencate qui:

https://github.com/pythonnet/pythonnet/wiki/Installation

+1

Questo ha aiutato molto mio figlio quindi devo un voto in più –

3

realtà ho preso le cose per le mie mani qui e ha creato un pacchetto Python.Net Chocolatey. da installare, basta eseguire

cinst pythonnet

nella riga di comando. Forse questo aiuterà gli utenti a risolvere questo problema.

2

Se si prevede di bloccare con py2exe o pyinstall assicurarsi di installare la versione di sviluppo. C'è qualcosa di sbagliato nella versione 2.0.0 quando è pacchettizzata con py2exe, pyinstaller e forse altri freezers. Ma 2.1.0.dev1 funziona bene. Quindi ...

pip install --pre pythonnet

E si dovrà aggiungere il pythone.runtime.dll al fascio (vedi Documentazione per la vostra Bundler preferito). C'è anche un problema con il modo in cui py2exe carica la DLL quando usa bundle_files: 1 (single exe).

Problemi correlati