2013-01-31 14 views
15

Pobrałem Python for .NET.
Wewnątrz zamka znajduje się clr.pyd, nPython.exe, Python.Runtime.dll i 2 pliki bazy danych debugowania.
Umieściłem clr.pyd i Python.Runtime.dll w moich python DLLs katalog C: \ Python27 \ DLLs myśląc, że to wszystko, co jest potrzebne do instalacji. I wtedy otworzyć Pythona GUI oraz typ import clr i uzyskać:Jak zainstalować Python dla .NET na Windows

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

Nowy w Pythonie, ale nie .NET i chcesz korzystać z CPython i nie IronPython. Czego mi brakuje w tej instalacji? Readme z Python dla .NET mówi, że jest instalacja dla pakietu Windows, ale wszystko, co znalazłem, to plik zip.

+0

"python.net" nie masz na myśli ironpython? –

+5

Ja nie. IronPython to własny plik wykonywalny stworzony przez MS. Chcę użyć "normalnego" Pythona, ale mam do niego bibliotekę .NET. To było moje zrozumienie Python.NET to robi. – user441521

+1

Twoje zrozumienie jest poprawne. Chciałbym to wyjaśnić, ponieważ IronPython jest. Env en, który zawiera Python. Python .Net pozwala Pythonowi zawrzeć .Net – bc3tech

Odpowiedz

5

Poprawnym sposobem instalacji Pythona dla .NET jest skopiowanie WSZYSTKICH plików z .zip do katalogu zawierającego Twój plik .py.

Następnie jeśli wykonamy

python yourfilename.py 

okaże się, że Twój "import clr" oświadczenie działa. Przetestowałem to przy użyciu python 2.7 x86 i pythonnet-2.0-Beta0-clr4.0_140_py27_UCS2_x86.zip

Udało mi się powielić twój błąd, kopiując plik clr.pyd tylko do mojego katalogu roboczego.

Zauważ, że nie byłem w stanie dokonać tej pracy w Pythonie 3.3 x86 lub Python 3.3 x64

+0

Wierzę, że problem nie jest związany z kopiowaniem w stosunku do innych plików. – Jonno

+2

Działa to, ponieważ sys.path zawiera bieżący katalog, ale przenoszenie Pythonneta z każdym skryptem .py nie jest zbyt elastyczne i koszmar utrzymania. – denfromufa

2

nie wiem dlaczego jeszcze, ale tylko w ten sposób mogę zmusić go do pracy jest skopiować te 3 pliki do C: \ Python27 \ directory bezpośrednio.

13

Właściwym sposobem, aby załadować CLR w Pythonie jest tak:

  1. Upewnij stare rzeczy nie pozostało z Python.NET w folderze instalacji Pythona (np C: \ Python27). W moim przypadku miałem spuściznę clr.pyd w jednym z folderów. Zauważ, że pip dla niektórych starych wersji nie usunął wszystkich części Python.NET.
  2. Dołącz do katalogu z plikami Python.NET (clr.pyd i Python.Runtime.dll) do sys.path

Teraz można załadować najbardziej elastyczny sposób CLR nawet bez instalacji do katalogów Python!

można kompilować ze źródła na github:

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

lub użyj Koła/instalatorów Windows od Christoph GOHLKE:

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

pakiet PyPI jest dostępny do instalacji z pip:

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

Więcej opcji instalacyjnych takich doker, WinPython, Conda, Nuget, Choco są wymienione tutaj:

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

+1

To bardzo pomogło mojemu synowi, więc jestem winien przegłosowanie –

3

I rzeczywiście wziął sprawy w swoje ręce, aby tu i stworzył pakiet Python.Net Chocolatey. w instalacji, wystarczy uruchomić

cinst pythonnet

w wierszu poleceń. Może to pomoże użytkownikom mającym problemy z uruchomieniem tego.

2

Jeśli zamierzasz zamarznąć przy użyciu py2exe lub pyinstall, koniecznie zainstaluj wersję dev. Coś jest nie tak z wersją 2.0.0, gdy jest w pakiecie z Py2exe, Pyinstallerem i może innymi urządzeniami do zamrażania. Ale 2.1.0.dev1 działa dobrze. Więc ...

pip install --pre pythonnet

i trzeba dodać pythone.runtime.dll do wiązki (patrz Dokumentacja dla preferowanej Bundler). Istnieje również problem z tym, jak py2exe ładuje bibliotekę dll podczas używania bundle_files: 1 (single exe).