2013-01-31 16 views
15

Ich habe Python for .NET heruntergeladen.
Innerhalb der Zip ist clr.pyd, nPython.exe, Python.Runtime.dll und 2 Debug-Datenbankdateien.
Ich legte die clr.pyd und Python.Runtime.dll in meinem Python-DLLs-Verzeichnis C: \ Python27 \ DLLs denke, das ist alles, was für die Installation benötigt wird. Ich öffnen Sie dann den Python GUI und Typ Import clr und ich bekomme:Wie installiert man Python für .NET unter Windows

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

Neu bei Python aber nicht .NET und will die CPython und nicht den Ironpython verwenden. Was fehlt mir in dieser Installation? Die Readme von Python für .NET sagt, es gibt eine Installation für Windows-Paket, aber alles, was ich fand, war die Zip-Datei.

+0

"python.net" meinst du nicht ironpython? –

+5

Ich nicht. IronPython ist eine eigene ausführbare Datei von MS. Ich möchte das "normale" Python verwenden, aber die .NET-Bibliothek verfügbar machen. Es war mein Verständnis, dass Python.NET das tut. – user441521

+1

Ihr Verständnis ist richtig. Ich erkläre es gerne, da IronPython ein .Net-Env ist, das Python enthält. Python .Net ermöglicht Python zu enthalten. NET – bc3tech

Antwort

5

Der korrekte Weg, um Python für .NET zu installieren, ist ALLE Dateien von der ZIP in das Verzeichnis zu kopieren, das Ihre .py-Datei enthält.

Dann, wenn Sie

python yourfilename.py 

ausführen, sollten Sie feststellen, dass Ihre "import clr" Anweisung funktioniert. Ich habe dies mit Python 2,7 x86 und pythonnet-2.0-Beta0-clr4.0_140_py27_UCS2_x86.zip getestet

Ich konnte Ihren Fehler replizieren, indem Sie nur die Clr.pyd-Datei in mein Arbeitsverzeichnis kopieren.

Bitte beachte, dass ich nicht in der Lage war, diese Arbeit in Python 3.3 x86 oder Python machen 3.3 x64

+0

Ich glaube, das Problem bezieht sich nicht auf das Kopieren über die anderen Dateien. – Jonno

+2

Das funktioniert, weil sys.path das aktuelle Verzeichnis enthält, aber das Tragen von Python mit jedem .py-Skript ist nicht sehr flexibel und Wartungs-Albtraum. – denfromufa

2

Ich weiß nicht, warum noch nicht, aber der einzige Weg, ich es arbeiten könnte, um diese drei Dateien in dem kopieren C: \ Python27 \ Verzeichnis direkt.

13

Der richtige Weg CLR in Python zu laden ist wie folgt:

  1. Achten Sie darauf, keine alten Sachen aus Python.NET in Python-Installationsordner gelassen wird (zum Beispiel C: \ Python27). In meinem Fall hatte ich Legacy clr.pyd in einem der Ordner. Beachten Sie, dass Pip für einige alte Versionen nicht alle Teile von Python.NET entfernt hat.
  2. Fügen Sie das Verzeichnis mit Python.NET Dateien (clr.pyd und Python.Runtime.dll) zu sys.path

Jetzt können Sie sogar ohne Installation auf Python Verzeichnisse CLR die flexibelste Art und Weise geladen werden!

Sie können von der Quelle auf Github kompilieren:

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

oder verwenden Sie Windows Räder/Installateure von Christoph Gohlke:

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

PyPI Paket für die Installation von pip verfügbar:

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

Installation

Weitere Optionen wie Docker, WinPython, Conda, nuget, choco sind hier aufgeführt:

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

+1

Das hat meinem Sohn sehr geholfen, also verdanke ich das –

3

ich eigentlich Angelegenheiten nahm in meine eigenen Hände hier und erstellte Paket eine Python.Net Chocolatey. zu installieren, einfach laufen

cinst pythonnet

in der Befehlszeile. Vielleicht wird dies Benutzern helfen, Probleme zu bekommen.

2

Wenn Sie planen, mit py2exe oder pyinstall einzufrieren, installieren Sie unbedingt die dev-Version. Mit der Version 2.0.0 ist etwas nicht in Ordnung, wenn sie mit py2exe, pyinstaller und anderen Kühlschränken geliefert wird. Aber 2.1.0.dev1 funktioniert gut. So ...

pip install --pre pythonnet

Und Sie werden die pythone.runtime.dll zu dem Bündel hinzufügen müssen (siehe Dokumentation für Ihren bevorzugten Bündler). Es gibt auch ein Problem damit, wie py2exe die DLL lädt, wenn bundle_files verwendet wird: 1 (single exe).