Column Posted November 3, 2015 Report Posted November 3, 2015 (edited) As dori sa stiu cu ce IDE pot crea o extensie de python .pyd . Am facut o aplicatie in Visual C++ 2010 si o extensie insa dupa ce am instalat acea aplicatie in alt calculator imi dadea erori, imi spunea ca nu am .NET si alte lucruri care nu imi trebuiesc intr-un .dll . Am incercat si cu DEV C++ insa am vazut ca nu se compileaza...#include <Python.h>PyMethodDef MyProgramByColumn[] = { {0,0,0,0};};PyMODINIT_FUNCinitmyprogram(void){PyObject *m;m=Py_InitModule("myprogram", MyProgramByColumn);if(m==NULL)return;}Sunt la inceput si doresc sa lucrez cat mai mult in C/C++, daca am spus ceva banal nu doresc sa ma luati peste picior, ca va asigur ca voi nu stiti foarte multe! Edited November 4, 2015 by Column Quote
tjt Posted November 3, 2015 Report Posted November 3, 2015 (edited) Zici ceva de extensie, dupa zici de un program in C++, nu prea inteleg nimic.In legatura cu IDE, renunta la visual studio, dev c++ si instaleaza Code Blocks : Code :: Blocks#include <iostream>using namespace std;int main(){ int x,y,z; cin>>x>>y; z=x; x=y; y=z; cout<<x<<" "<<y<<endl; return 0;}Daca vrei sa afli mai multe informatii despre "using namespace std", uite aici : Name visibility - C++ TutorialsPS: Renunta la formatari de genul bold, italic atunci cand scrii pe forum. Edited November 3, 2015 by tjt Quote
Column Posted November 3, 2015 Author Report Posted November 3, 2015 tjt, folosesc si CodeBlocks, DevC++, Visual Studio 2010 (include aici Visual Basic, Visual C++, etc), Borland etc. dar nici-un compilator nu-mi compileaza extensia .pyd . Mai mult decat atat, Visual C++ mi-l compileaza insa imi adauga bibliotecile alea .NET iar cand vrei sa-ti mearga programul pe alte sisteme de operare sau alte calculatoare ce nu au instalate framework-urile, trebuie sa le instalezi chiar daca tu in program nu le folosesti.. Daca intelegi ce vreau sa spun. Programul pus in PHP este doar asa de "design" nu are nicio legatura cu ce am zis:)) dar mersi de sfat... Mai astept pareri. Quote
watsonAI Posted November 3, 2015 Report Posted November 3, 2015 pyd files sunt un fel de dll-uri python. Aici mai multe informatii. Quote
Column Posted November 3, 2015 Author Report Posted November 3, 2015 watsonAI, stiu ce sunt, stiu cum se lucreaza cu ele, insa nu stiu cu ce sa le compilez. Quote
Active Members MrGrj Posted November 4, 2015 Active Members Report Posted November 4, 2015 (edited) As dori sa stiu cu ce IDE pot crea o extensie de python .pyd . Am facut o aplicatie in Visual C++ 2010 si o extensie insa dupa ce am instalat acea aplicatie in alt calculator imi dadea erori, imi spunea ca nu am .NET si alte lucruri care nu imi trebuiesc intr-un .dll . Am incercat si cu DEV C++ insa am vazut ca nu se compileaza...Sunt la inceput si doresc sa lucrez cat mai mult in C/C++, daca am spus ceva banal nu doresc sa ma luati peste picior, ca va asigur ca voi nu stiti foarte multe!Ai zis ca stii ce inseamna .pyd si cum sa le folosesti, insa eu nu cred asta, asa ca iti mai povestesc putin:Fiserele cu extensia .pyc contin bytecode, adica "transformarea" din cod sursa in bytecode. Pe scurt, poti rula direct un program in Python fara a fi nevoie in prealabil de a creea un executabil pe care mai apoi sa il executi.Mai mult, aceste fisiere .pyc maresc viteza de executie daca le ai prin preajma ( de obicei se gasesc cu acelasi nume ca si .py files )Nu exista "un program" cu care sa creezi o extenie de python .pyd. Ai importat un modul in python, ti-a creeat .pyd-ul dupa care tanjesti si gata, done.Ce legatura are aplicatia ta facuta in C++ cu .pyd-ul ? Ce vrei mai exact ? Un fisier .pyd contine pyObjects asa ca exceptand cazul exceptional in care poti folosi libraria BOOST in C++ pentru a creea ceva asemanator, habar nu am ce vrei sa faci.Cat despre portabilitatea codului tau... cel mai usor e sa folosesti notepad++ si sa compilezi direc cu gcc. Astfel, va fi de 100 de ori mai usor sa scrii cod care mai apoi poate fii rulat pe toate distributiile.Deci, tu ce vrei pana la urma ? Fii clar si concis. Edited November 4, 2015 by MrGrj Quote
Column Posted November 4, 2015 Author Report Posted November 4, 2015 MrGrj stiu ce inseamna fisierele .pyd, nu trebuie sa-mi dai exemple, iar la intrebare am fost destul de explicit dupa parerea mea. Eu vreau sa fac o extensie de python care sa interactioneze cu C++, mai exact vreau sa transmit niste date din C++ in python. O sa-ti dau un exemplu doar, daca incerci sa incluzi bibliotecile python-ului si fisierele din "include" in CodeBlocks, nu o sa ti le vada si desigur nu o sa le compile-ze, dar in Visual C++ merge sa le folosesti insa am spus, Visual C++ o sa-mi incarce si bibliotecile din .NET ceea ce ma enerveaza. Am uitat sa spun ca nu doresc sa folosesc "<BOOST-ul>" ci doar vreau sa fac declaratiile proprii si toate cele, daca intelegi. Eu o sa las un exemplu mic mai sus in descriere, iar tu incearca sa-l rulezi in CodeBlocks fara BOOST, iar daca iti merge te rog da-mi PM. Quote
Active Members MrGrj Posted November 4, 2015 Active Members Report Posted November 4, 2015 (edited) Sa-mi bag pula in scrisul asta cu bold si in style-ul pus. Nu poti sa scrii normal ?Daca nu vrei sa folosestii boost, mai stiu doar altele doua care isi fac treaba:SWIG linkSIP linkO alta metoda ar fi sa faci toata treaba manual ( asa cum vrei tu ) folosind C API insa te avertizez ca e low-level si trebe' ceva cunostinte sa faci asta. Dar e bine ca asa mai inveti cum functioneaza Python in general ( si oricum tre' sa stii sa faci asta daca folosesti SWIG ) Edited November 4, 2015 by MrGrj Quote
Column Posted November 4, 2015 Author Report Posted November 4, 2015 Am cunostinte. O sa folosesc C_API si asa scriu programul de la 0.PS: Scuze, dar imi place Comic Sans MS si nu, nu e boldat:)) Quote
Column Posted November 4, 2015 Author Report Posted November 4, 2015 #OFF Topic! PS: Scuze ca am postat de 2 ori! Quote
S.L.C Posted November 4, 2015 Report Posted November 4, 2015 (edited) Mama ei de documentatie (scuze de tldr si unele greseli in avans)Is a *.pyd file the same as a DLL?Yes, .pyd files are dll’s, but there are a few differences. If you have a DLL named foo.pyd, then it must have a function initfoo(). You can then write Python “import foo”, and Python will search for foo.pyd (as well as foo.py, foo.pyc) and if it finds it, will attempt to call initfoo() to initialize it. You do not link your .exe with foo.lib, as that would cause Windows to require the DLL to be present.Note that the search path for foo.pyd is PYTHONPATH, not the same as the path that Windows uses to search for foo.dll. Also, foo.pyd need not be present to run your program, whereas if you linked your program with a dll, the dll is required. Of course, foo.pyd is required if you want to say import foo. In a DLL, linkage is declared in the source code with __declspec(dllexport). In a .pyd, linkage is defined in a list of available functions.Deci? Click dreapta -> Rename -> schimb .dll co .pyd Dar asta inseamna ca nu pot schimba numele fisierului deoarece python nu va mai gasii functia exportata gen [dllname]init().Building C and C++ Extensions on WindowsPython/C API Reference ManualExtending and Embedding the Python InterpreterExtending/Embedding FAQNormal ca se plange de .NET si alte prostii pe restul platformelor si este si normal. Windows (si alte platforme) are anumite functii pe care programul tau si restul programelor din calculatorul tau le folosesc. Gen strcpy(), malloc(), printf() etc.Si pentru a reduce marimea executabilului si memoria folosita de fiecare executabil la run-time sa decis pentru a implementa acele functii si utilitati intr-un dll comun. Pe care il vezi tot timpul sub numele Visual C++ Redistributable... in cerintele anumitor programe. Si daca tu ai compilat cu Visual Studio 2015 automat ai nevoie de Visual C++ Redistributable for Visual Studio 2015 si tot asa.Daca vrei sa nu depinzi de bibliotecile comune din windows atunci le poti include static in executabilul tau. Avoiding the Visual C++ Redistributable Package (ultima optiune!)Daca te decizi sa folosesti Code-Blocks si MinGW atunci recomand Code-Blocks versiunea faca compiler. Adica codeblocks-##.##-setup.exe Si inca o mica sugestie ar fi sa downloadezi si nightly builds de pe forum. Code-Blocks este distribuit foarte rar. De la ultima versiune si pana acum au fost sute de imbunatatiri. Recomand foarte mult! (doar downloadezi arhivele si le extragi in folderul Code-Blocks)Urmatorul lucru ar fi MinGW dar nu orice MinGW. In nici un caz TDM-GCC. Asta daca nu vrei batai de cap cu unele biblioteci. Eu recomand MinGW-w64. Nu te lasa pacalit de nume. Functioneaza si pe 32bit.Poti downloada manual archivele pentru x32 sau x64. Sau poti folosii installer-ul oferit.Pentru x32: #.#.#/threads-posix/dwarf/i686-5.2.0-release-posix-dwarf-rt_v4-rev#.7zPentru x64: #.#.#/threads-posix/seh/x86_64-5.2.0-release-posix-seh-rt_v4-rev#.7zDupa care specifici unde sa-l gaseasca Code-Blocks. Pentru asta te duci la Settings > Compiler si introduci folderul si numele executabilelor respective.Acum daca ai instalat tot ce trebuie. Sa nu crezi ca MinGW nu are si el ce are si Visual Studio. Daca nu faci static linking atunci executabilul tau se va plange de libstdc++-6.dll, libwinpthread-1.dll, libgcc_s_dw2-1.dll etc.Deci in proiectul tau deschis in Code-Blocks. Te duci la Project > Build Options (sau click dreapta pe el si > Build Options). Dupa care selectezi modulul tau preferat Release/Debug si introduci urmatoarele comezi.La Compiler Settings > Other compiler options :-static-libgcc-static-libstdc++-enable-staticLa Linker Settings > Other linker options :-staticAtentie: Marimea executabilului tau va fi mai mare datorita includerii bibliotecilor standard in mode static. Sper ca nu trebuie sa explic de ce.Acum poti compila executabilul tau faca a fi nevoie sa distribui nimic. Edited November 5, 2015 by S.L.C Quote
Column Posted November 5, 2015 Author Report Posted November 5, 2015 S.L.C. m-am prins cum sta treaba, acum o sa reiau proiectul de la cap fericit! Quote