Cython ve Windows

qelurg

  • ****
  • 373
    • Zobrazit profil
    • E-mail
Cython ve Windows
« kdy: 03. 09. 2022, 00:06:58 »
Jsem totální windows lama, ale dal jsem se na charitu a slíbil udělat jeden program pro Windows v Pythonu a přeložil ho v Pythonu. Program jsou v podstatě jednoduché operace a výpočty, ale nad velmi rozsáhlými daty, soubory velké v jednotkách GB, což představuje miliardy operací. Takže bych to rád optimalizoval v Cythonu. Cython používám v Linuxu, ale ve Windows jsem bezradný.

Cython jsem nainstaloval příkazem `pip install cython`, což proběhlo v pořádku a tím jsem skončil. Příkazová řádka příkaz cython stále nezna a mám neblahé tušení, že windows ani nemají vývojové prostředí, a tudíž rozchodit Cython ve Windows bude asi složitější víc, než se zdá.

Má tu někdo zkušenosti s Cythonem ve windows a může mi říct, co vše je potřeba udělat, aby v nich fungoval? Díky.


a6b

  • ***
  • 119
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #1 kdy: 03. 09. 2022, 04:23:08 »
windows maji taky systemovou promennou path, ale vetsinou se nastavuje klikanim.

https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/

qelurg

  • ****
  • 373
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #2 kdy: 03. 09. 2022, 08:13:52 »
No, Cython je transkompiler do jazyka C, takže předpokládám, že hlavně potřebuji ekvivalent linuxového

Kód: [Vybrat]
sudo apt-get update
sudo apt-get install build-essential

Ale já naposledy ve windows, či spíše ještě v DOSu, programoval v djgpp a používal ide Rhide. To pro mě vlastně byla přestupní stanice na Linux. Dnes už to nikdo nebude znát, leda z vyprávění starců nad ohněm. Takže tohle bych potřeboval polopatisticky. Díky.

Ink

  • *****
  • 664
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #3 kdy: 03. 09. 2022, 09:34:22 »
No, Cython je transkompiler do jazyka C, takže předpokládám, že hlavně potřebuji ekvivalent linuxového

Kód: [Vybrat]
sudo apt-get update
sudo apt-get install build-essential

Ale já naposledy ve windows, či spíše ještě v DOSu, programoval v djgpp a používal ide Rhide. To pro mě vlastně byla přestupní stanice na Linux. Dnes už to nikdo nebude znát, leda z vyprávění starců nad ohněm. Takže tohle bych potřeboval polopatisticky. Díky.

Podívej se především na stránky Cythonu:

The CPython project recommends building extension modules (including Cython modules) with the same compiler that Python was built with. This is usually a specific version of Microsoft Visual C/C++ (MSVC) - see https://wiki.python.org/moin/WindowsCompilers. MSVC is the only compiler that Cython is currently tested with on Windows. A possible alternative is the open source MinGW (a Windows distribution of gcc).

Ink

  • *****
  • 664
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #4 kdy: 03. 09. 2022, 09:36:24 »


qelurg

  • ****
  • 373
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #5 kdy: 03. 09. 2022, 10:13:10 »
Tomuhle právě nerozumím. Takž k tomu potřebuji nainstalovat tohle?

https://pypi.org/project/msvc-runtime/

A jak potom doinstaluji make, překladač a linker? Nepotřebuji mohutné IDE, ani na něj nemám místo. Zdrojové *.c kódy vygeneruje Cython, potřebuji je jen přeložit pomocí příkazů na příkazové řádce. Potřebuji poradit, přesně který instalační balíček mám stáhnout a nainstalovat. Tiše doufám, že microsoft takový základ poskytuje v nekomerční bezplatné verzi.

Na linuxu překládám programy pomocí jednoduchého makefile. V podstatě jen potřebuji nahradit gcc něčím ve windows. Ten zbytek by měl fungovat beze změny, krom toho rm -f, ale to je marginálie. Pokud by Windows potřeboval toho víc, pak bych ještě potřeboval poradit s úpravou toho makefile. Ideálně bych chtěl radu od někoho, kdo to reálně používá a má vychytané různé mouchy.

Kód: [Vybrat]
PYTHON=python
CYTHON=cython
COMPILER=gcc
LINKER=gcc

CFLAGS=-O9

INCLUDE_DIR:=$(shell $(PYTHON) -c "from distutils import sysconfig; print(sysconfig.get_python_inc())")
LIBRARY_DIR:=$(shell $(PYTHON) -c "from distutils import sysconfig; print(sysconfig.get_config_var('LIBDIR'))")
PYTHON_LIB:=$(shell $(PYTHON) -c "from distutils import sysconfig; print(sysconfig.get_config_var('LIBRARY')[3:-2])")
SYSLIBS:=$(shell $(PYTHON) -c "from distutils import sysconfig; print(sysconfig.get_config_var('SYSLIBS'))")


all: main \
config


.PHONY: clean

# nemazat C
.PRECIOUS: %.c

clean:
rm -f *.o \
rm -f *.c \

# O -> EXE
%: %.o
$(LINKER) -o $@ -L$(LIBRARY_DIR) -l$(PYTHON_LIB) $(SYSLIBS) $<


# C -> O
%.o: %.c
$(COMPILER) $(CFLAGS) -I$(INCLUDE_DIR) -c $< -o $@


# Python -> C
%.c: %.py
$(CYTHON) -a --embed $<

%.c: %.pyx
$(CYTHON) -a --embed $<

« Poslední změna: 03. 09. 2022, 10:22:09 od qelurg »

Ink

  • *****
  • 664
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #6 kdy: 03. 09. 2022, 12:52:01 »
Hele, já už jsem ve Windows tyhle věci roky nedělal. Pamatuju si, že nám ve firmě kdysi fungovaly extension moduly pro Python kompilované v mingw i v MSVC, který je ale obecně doporučovaný používat. Zkus si stáhnout instalátor MSVC (Visual Studia), řekl bych, že se dá zaškrtat instalace pouze řádkových překladačů a utilit. Microsoft má utilitu nmake, pokud není součástí VS, někde to ke stažení bude nabízet. Jinak máš možnost zkusit i CygWin. Googli, zkoušej, podle mě to je maximálně tak na dva večery a bude to chodit.

Tomuhle právě nerozumím. Takž k tomu potřebuji nainstalovat tohle?

https://pypi.org/project/msvc-runtime/

A jak potom doinstaluji make, překladač a linker? Nepotřebuji mohutné IDE, ani na něj nemám místo. Zdrojové *.c kódy vygeneruje Cython, potřebuji je jen přeložit pomocí příkazů na příkazové řádce. Potřebuji poradit, přesně který instalační balíček mám stáhnout a nainstalovat. Tiše doufám, že microsoft takový základ poskytuje v nekomerční bezplatné verzi.

Na linuxu překládám programy pomocí jednoduchého makefile. V podstatě jen potřebuji nahradit gcc něčím ve windows. Ten zbytek by měl fungovat beze změny, krom toho rm -f, ale to je marginálie. Pokud by Windows potřeboval toho víc, pak bych ještě potřeboval poradit s úpravou toho makefile. Ideálně bych chtěl radu od někoho, kdo to reálně používá a má vychytané různé mouchy.

Kód: [Vybrat]
PYTHON=python
CYTHON=cython
COMPILER=gcc
LINKER=gcc

CFLAGS=-O9

INCLUDE_DIR:=$(shell $(PYTHON) -c "from distutils import sysconfig; print(sysconfig.get_python_inc())")
LIBRARY_DIR:=$(shell $(PYTHON) -c "from distutils import sysconfig; print(sysconfig.get_config_var('LIBDIR'))")
PYTHON_LIB:=$(shell $(PYTHON) -c "from distutils import sysconfig; print(sysconfig.get_config_var('LIBRARY')[3:-2])")
SYSLIBS:=$(shell $(PYTHON) -c "from distutils import sysconfig; print(sysconfig.get_config_var('SYSLIBS'))")


all: main \
config


.PHONY: clean

# nemazat C
.PRECIOUS: %.c

clean:
rm -f *.o \
rm -f *.c \

# O -> EXE
%: %.o
$(LINKER) -o $@ -L$(LIBRARY_DIR) -l$(PYTHON_LIB) $(SYSLIBS) $<


# C -> O
%.o: %.c
$(COMPILER) $(CFLAGS) -I$(INCLUDE_DIR) -c $< -o $@


# Python -> C
%.c: %.py
$(CYTHON) -a --embed $<

%.c: %.pyx
$(CYTHON) -a --embed $<

mhi

  • *****
  • 500
    • Zobrazit profil
Re:Cython ve Windows
« Odpověď #7 kdy: 03. 09. 2022, 13:20:12 »
My 2 cents: MSVC se instaluje s Visual Studiem (IDE), je to celkem otesanek, ale nasledne jde normalne pouzivat prekladac z commandline bez vetsich problemu, a navic lze pouze odkopirovat prislusne slozky na jiny Win system a tam normalne pouzivat.

Takhle prekladam jednu knihovnicku pomoci .cmd souboru:

Kód: [Vybrat]
T:\MSVC\14.24.28314\bin\Hostx86\arm\cl /c project.cpp /Fo:project_xyz-arm.obj /MT /Zl /IT:\msvc\14.24.28314\include /IT:\msvc\winkit\10\include\10.0.18362.0\um /IT:\msvc\winkit\10\include\10.0.18362.0\shared /IT:\msvc\winkit\10\include\10.0.18362.0\ucrt
T:\MSVC\14.24.28314\bin\Hostx86\arm64\cl /c project.cpp /Fo:project_xyz-arm64.obj /MT /Zl /IT:\msvc\14.24.28314\include /IT:\msvc\winkit\10\include\10.0.18362.0\um /IT:\msvc\winkit\10\include\10.0.18362.0\shared /IT:\msvc\winkit\10\include\10.0.18362.0\ucrt
T:\MSVC\14.24.28314\bin\Hostx86\x64\cl /c project.cpp /Fo:project_xyz-x64.obj /MT /Zl /IT:\msvc\14.24.28314\include /IT:\msvc\winkit\10\include\10.0.18362.0\um /IT:\msvc\winkit\10\include\10.0.18362.0\shared /IT:\msvc\winkit\10\include\10.0.18362.0\ucrt

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #8 kdy: 03. 09. 2022, 13:21:01 »
Zkus si stáhnout instalátor MSVC (Visual Studia), řekl bych, že se dá zaškrtat instalace pouze řádkových překladačů a utilit.
Tohle se myslím stahuje zvlášť, jsou tam všechny nástroje kromě GUI (jen instalátor a updater jsou GUI aplikace). Tohle by mělo stačit na překlad čehokoliv (já to dřív používal na Windows pro ARM, když tam ještě kompletní VS nebylo). Rozhodně to je na Windows snazší cesta než GNU.

Re:Cython ve Windows
« Odpověď #9 kdy: 03. 09. 2022, 14:08:11 »
Potřebuješ kompilátor MSVC stejné verze jako interpretr se kterým pracuješ. Stejně pak tvoji uživatele. Je to kvůli binární kompatibilitě. Nemusíš instalovat celé Visual Studio, stačí pouze VS Build Tools. https://visualstudio.microsoft.com/downloads/?q=build+tools Tabulka kompilátor vs verze CPythonu zde: https://wiki.python.org/moin/WindowsCompilers#Which_Microsoft_Visual_C.2B-.2B-_compiler_to_use_with_a_specific_Python_version_.3F
 Pozor, někdy záleží ale i na přesné verzi, dělal jsem to pokus omyl, pak jsem našel ještě podrobnější přehled. Cython jsem nepoužíval, prostě C kompilovanou extenzi, ale to je snad jedno.
Přesnou verzi interpreteru najdeš takto:

PS C:\Users\uetoyo> py -3.8
Python 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53)
[MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>


Tabulka

<code>
Microsoft Visual C++ versions
Visual C++ version   _MSC_VER
Visual C++ 4.x   1000
Visual C++ 5   1100
Visual C++ 6   1200
Visual C++ .NET   1300
Visual C++ .NET 2003   1310
Visual C++ 2005 (8.0)   1400
Visual C++ 2008 (9.0)   1500
Visual C++ 2010 (10.0)   1600
Visual C++ 2012 (11.0)   1700
Visual C++ 2013 (12.0)   1800
Visual C++ 2015 (14.0)   1900
Visual C++ 2017 (15.0)   1910
Visual C++ 2017 (15.3)   1911
Visual C++ 2017 (15.5)   1912
Visual C++ 2017 (15.6)   1913
Visual C++ 2017 (15.7)   1914
Visual C++ 2017 (15.8)   1915
Visual C++ 2017 (15.9)   1916
Visual C++ 2019 RTW (16.0)   1920
Visual C++ 2019 (16.1)   1921
Visual C++ 2019 (16.2)   1922
Visual C++ 2019 (16.3)   1923
Visual C++ 2019 (16.4)   1924
Visual C++ 2019 (16.5)   1925
Visual C++ 2019 (16.6)   1926
Visual C++ 2019 (16.7)   1927
Visual C++ 2019 (16.8)   1928
Visual C++ 2019 (16.9)   1928
Visual C++ 2019 (16.10)   1929
Visual C++ 2019 (16.11)   1929
Visual Studio 2022 RTW (17.0)   1930
</code>


Debilní smajlící :D
« Poslední změna: 03. 09. 2022, 14:14:12 od uetoyo »

Re:Cython ve Windows
« Odpověď #10 kdy: 04. 09. 2022, 09:10:05 »
No, Cython je transkompiler do jazyka C, takže předpokládám, že hlavně potřebuji ekvivalent linuxového

Kód: [Vybrat]
sudo apt-get update
sudo apt-get install build-essential

Kromě možnosti "instalace překladače MSVC" jsou ještě další 2 možnosti:
  • cygwin
  • msys2

Pokud chcete svoje programy, přeložené v cython-u, distribuovat na jiná PC, možnost "cygwin" je komplikovanější, protože exe soubory přeložené pod cygwin vyžadují přítomnost funkční cygwin instalace.
V takovém případě je lepší volbou msys2: je to vlastně "build-essential" s windows verzí C překladače, tj. např. mingw32 nebo mingw64. Oproti různým dalším distribucím projektu mingw, které obsahují pouze gcc + C/C++ knihovny, obsahuje msys2 - podobně jako cygwin - spoustu dalších překladačů vč. python a cython, a také balíčkovací systém pacman.  Narozdíl od cygwin-u, msys2 cílí na to, aby exe soubory přeložené v msys2 šlo distribuovat na další PC bez nutnosti instalace celého msys2 na to další PC.

Zkusil jsem teď do svého msys2 doinstalovat cython:
Kód: [Vybrat]
pacman -S cythonTím se mi nainstalovala poslední stable verze 0.29.32.
Zkusil jsem v tom spustit tutorial https://riptutorial.com/cython/example/14478/hello-world - vše funguje.
Výsledkem je adresář build a soubory: 
hello.c 
hello.cpython-310-x86_64-msys.dll

Jestli se to dá spustit na jiném PC a jak toho dosáhnout jsem nezkoušel - nejsem v pythonu zběhlý, jen hádám, že by to chtělo ještě něco jako py2exe (???) pro zajištění binární kompatibility interpretru pythonu (na tom dalším PC) s DLL "hello.cpython-310-x86_64-msys.dll", které vyrobil cython  (?)
« Poslední změna: 04. 09. 2022, 09:15:12 od tdulik »

qelurg

  • ****
  • 373
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #11 kdy: 04. 09. 2022, 10:26:22 »
uetoyo: díky. Pochopil jsem z toho, že pro Python 3.10 potřebuji překladač Visual C++ verzi 14.x, a že jej najdu v Build tools. Na stránkách MS jsem se zaregistroval do nějakého Visual Studio subscriptions. Tam se nabízí ke stažení Visual Studio 2022, 2019 a 2017.

U 2022 je ke stažení:
- Build Tools for Visual Studio 2022 LTSC (version 17.0)
- Build Tools for Visual Studio 2022 (version 17.3)
U 2019 je ke stažení:
- Build Tools for Visual Studio 2019 (version 16.9)
U 2017
- Build Tools for Visual Studio 2017 (version 15.9)

Nevím v kterém z nich je Visual C++ 14.x. Souvisí verze Build tools s verzí C++ a potřebuji ještě starší Visual studio, které MS už nenabízí, nebo ne?

Visual C++ 2005 (8.0)   1400
« Poslední změna: 04. 09. 2022, 10:31:51 od qelurg »

qelurg

  • ****
  • 373
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #12 kdy: 04. 09. 2022, 10:27:40 »
tdulik: díky za informace, pokud to neklapne s těmi build tools, zkusím to s tímto systémem.

qelurg

  • ****
  • 373
    • Zobrazit profil
    • E-mail
Re:Cython ve Windows
« Odpověď #13 kdy: 04. 09. 2022, 10:33:29 »
Už mi nejde upravit příspěvek, abych ho dopsal, tak ho sem dávám znovu.

uetoyo: díky. Pochopil jsem z toho, že pro Python 3.10 potřebuji překladač Visual C++ verzi 14.x, a že jej najdu v Build tools. Na stránkách MS jsem se zaregistroval do nějakého Visual Studio subscriptions. Tam se nabízí ke stažení Visual Studio 2022, 2019 a 2017.

U 2022 je ke stažení:
- Build Tools for Visual Studio 2022 LTSC (version 17.0)
- Build Tools for Visual Studio 2022 (version 17.3)
U 2019 je ke stažení:
- Build Tools for Visual Studio 2019 (version 16.9)
U 2017
- Build Tools for Visual Studio 2017 (version 15.9)

Nevím v kterém z nich je Visual C++ 14.x. Souvisí verze Build tools s verzí C++ a potřebuji ještě starší Visual studio, které MS už nenabízí, nebo ne?

Z té tabulky se mi zdá, že budu potřebovat asi jedno z tohodle, co:
- Visual C++ 2005 (8.0)   1400
- Visual C++ 2015 (14.0)   1900

Nevím která ta 14 je správná.
« Poslední změna: 04. 09. 2022, 10:36:56 od qelurg »

Re:Cython ve Windows
« Odpověď #14 kdy: 04. 09. 2022, 12:20:50 »
A pro jakou verzi Python to tedy potřebuješ?  Já to klidně zítra odzkouším. S MSVC je to jistota, ostatně i oficiální Python je pod ním kompilován, tak bych si to na Windows nekomplikoval. Druhá možnost je asi Docker a/nebo WSL.