Fórum Root.cz

Hlavní témata => Windows a jiné systémy => Téma založeno: qelurg 03. 09. 2022, 00:06:58

Název: Cython ve Windows
Přispěvatel: qelurg 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.
Název: Re:Cython ve Windows
Přispěvatel: a6b 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/
Název: Re:Cython ve Windows
Přispěvatel: qelurg 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.
Název: Re:Cython ve Windows
Přispěvatel: Ink 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).
Název: Re:Cython ve Windows
Přispěvatel: Ink 03. 09. 2022, 09:36:24
A pak třeba sem (Google poradí):

https://stackoverflow.com/questions/60322655/how-to-use-cython-on-windows-10-with-python-3-8
Název: Re:Cython ve Windows
Přispěvatel: qelurg 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 $<

Název: Re:Cython ve Windows
Přispěvatel: Ink 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 $<
Název: Re:Cython ve Windows
Přispěvatel: mhi 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
Název: Re:Cython ve Windows
Přispěvatel: Idris 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.
Název: Re:Cython ve Windows
Přispěvatel: Wavelet 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
Název: Re:Cython ve Windows
Přispěvatel: tdulik 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:

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 (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  (?)
Název: Re:Cython ve Windows
Přispěvatel: qelurg 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
Název: Re:Cython ve Windows
Přispěvatel: qelurg 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.
Název: Re:Cython ve Windows
Přispěvatel: qelurg 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á.
Název: Re:Cython ve Windows
Přispěvatel: Wavelet 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.
Název: Re:Cython ve Windows
Přispěvatel: qelurg 04. 09. 2022, 16:09:36
Nekomplikovat si to zbytečně je můj cíl. Python mám 3.10.
Název: Re:Cython ve Windows
Přispěvatel: tdulik 04. 09. 2022, 16:34:20
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.

"cython for Windows" se standardní Windows-verzí Python-u (tou, která je kompilovaná MSVC) - z toho popisu výše cítím potenciální "dependency hell". Vývoj v cython-u pod Windows s MSVC je možná docela exotická specialita (https://www.google.com/search?q=cython+msvc+problem), zatímco cython pod msys2 nabízí mainstreamové řešení s posledními stable verzemi všech balíčků - stejné, jako máte v Linuxu.

Poznámka lehce mimo téma: zjistil jsem, že na mém Windows PC mám Python 3.8, který je součástí instalace Inkscape, a ten je taky zkompilovaný pomocí GCC (takže nějakou verzí mingw). Asi se vývojáři Inkscape též nechtěli trápit s MSVC "specialitami" :-)

Jinak ovšem ze standardní windows command line můžu spustit i Python z distribuce msys2, takto:

Kód: [Vybrat]
c:\>set PATH=c:\msys64\mingw64\bin\
c:\>python
Python 3.10.6 (main, Aug 12 2022, 18:00:29)  [GCC 12.1.0 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Název: Re:Cython ve Windows
Přispěvatel: Karmelos 05. 09. 2022, 09:23:46
Hmmm gcc, cygwin, mingw, cython, python (ještě SWIG), husté...

obyčejný bfu prostě neví jestli to padá kvůli blbé syntaxi kompilovacích skriptů, neúplné cestě, chybějícím závislostem, nekompatibilníma verzema nebo (korporátním) restrikcím na lokále (co, kam lze instalovat/zapisovat, co odkud lze vubec spouštět/načíst...).

Jsem si chtěl onehdá v práci na windows zkompilovat dll pro použití v pythonu a je to prostě peklo, absolutní peklo...
Název: Re:Cython ve Windows
Přispěvatel: qelurg 05. 09. 2022, 14:31:09
Takže jsem zkusmo naistaloval VS Build Tools 2019. Našel jsem si, že překladač se jmenuje cl, ale příkazový řádek ho nezná. Nicméně nacházi se v adresáři c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64. V tomto adresáři je i nmake. Co mám teď udělat, abych mohl přeložit .c program?
Název: Re:Cython ve Windows
Přispěvatel: Karmelos 05. 09. 2022, 15:35:39
Nepomůže:
https://docs.microsoft.com/cs-cz/cpp/build/walkthrough-compile-a-c-program-on-the-command-line?view=msvc-170 (https://docs.microsoft.com/cs-cz/cpp/build/walkthrough-compile-a-c-program-on-the-command-line?view=msvc-170)
?