Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2015-04-11T14:08:43+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Des erreurs d'imports avec l'api python en C, message #512862015-04-11T14:08:43+02:00Cirdo/@Cirdohttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p51286<figure><blockquote>
<p>Je ne vois pas où est inclus Python.h…</p>
</blockquote>
<figcaption><p><a href="http://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p51284">fred1599</a></p></figcaption></figure><p>Je l'ai pas mis <img alt=";)" src="/static/smileys/clin.png"></p>Des erreurs d'imports avec l'api python en C, message #512842015-04-11T13:56:49+02:00fred1599/@fred1599https://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p51284<p>Je ne vois pas où est inclus Python.h…</p>Des erreurs d'imports avec l'api python en C, message #503832015-04-05T17:28:32+02:00Cirdo/@Cirdohttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50383<figure><blockquote>
<p>Par ailleurs, utiliser l'API C toute nue m'a toujours semblé risqué. Pourquoi ne pas passer par Cython, plutôt ? Tu y gagnerais en temps de développement, en temps de debug, en sécurité, en compatibilité…</p>
</blockquote>
<figcaption><p><a href="http://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50368">nohar</a></p></figcaption></figure><p>Je crois que je vais utiliser Cython, je pense que ça serait plus simple. Il faudra executer le fichier en asynchrones par contre. </p>
<p>En tout cas merci Kje, merci nohar <img alt=":)" src="/static/smileys/smile.png"></p>Des erreurs d'imports avec l'api python en C, message #503682015-04-05T15:53:13+02:00nohar/@noharhttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50368<p>Par ailleurs, utiliser l'API C toute nue m'a toujours semblé risqué. Pourquoi ne pas passer par Cython, plutôt ? Tu y gagnerais en temps de développement, en temps de debug, en sécurité, en compatibilité…</p>Des erreurs d'imports avec l'api python en C, message #503612015-04-05T14:55:00+02:00Kje/@Kjehttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50361<p>Il faut absolument que le path vers la lib standard soit correct mais je ne connais pas assez l'api C pour t'aider.</p>
<p>PS: Python-Markdown a déjà une interface utilitaire en ligne de commande, il doit pas y avoir grand chose a faire pour tenir compte des extension</p>Des erreurs d'imports avec l'api python en C, message #503592015-04-05T14:12:16+02:00Cirdo/@Cirdohttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50359<p>J'ai rétablie le code, j'ai mis le code du début du topic (Sinon j'ai pas bien compris ce que tu voulais me dire <img alt=":)" src="/static/smileys/smile.png"> ). J'ai toujours la même erreur. La variable, <code>buf</code>est correcte car j'arrive en la copiant à accéder à <code>Resources</code>.</p>
<figure><blockquote>
<p>Note que ca aurait été probablement plus facile pour toi d'appeler le code comme processus extérieur plutot que tout intégrer ainsi.
</p>
</blockquote>
<figcaption><p><a href="http://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50357">Kje</a></p></figcaption></figure><p>Je sais pas si en faisant un utilitaire ça serait plus rapide ?</p>Des erreurs d'imports avec l'api python en C, message #503572015-04-05T13:50:48+02:00Kje/@Kjehttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50357<p>Rétabli le code du markdown a ce qu'il est d'origine, corrige le problème de path et dit nous ce que tu as comme message d'erreur.</p>
<p>Note que ca aurait été probablement plus facile pour toi d'appeler le code comme processus extérieur plutot que tout intégrer ainsi.</p>Des erreurs d'imports avec l'api python en C, message #503462015-04-05T12:36:08+02:00Cirdo/@Cirdohttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50346<p>Effectivement il contient rien, c'est à cause de la ligne <code>PySys_SetPath(buf);</code>. Il met mon path dans mon fichier Resources, du coup pas de lib <img alt=":)" src="/static/smileys/smile.png"></p>
<p>La fonction <code>Py_SetPythonHome(buf);</code> n'a pas trop l'air de fonctionner.
Avant l'appelle de la fonction, le <code>PythonHome</code> est <code>NULL</code>. Après elle me donne le chemin des resources :
<code>/Users/Cirdo/Library/Developer/Xcode/DerivedData/iZeste-dycjahkgbpkxjmbmznckrqticjxv/Build/Products/Debug/iZeste.app/Contents/Resources/</code></p>
<p>Ensuite j'ai une erreur d'import pour mon fichier <code>markdownHmlt</code>.</p>
<p>Je redonne le code (test) :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47</pre></div></td><td class="code"><div class="codehilite"><pre><span class="n">PyObject</span> <span class="o">*</span><span class="n">module</span><span class="p">,</span> <span class="o">*</span><span class="n">argument</span><span class="p">,</span> <span class="o">*</span><span class="n">function</span><span class="p">,</span> <span class="o">*</span><span class="n">ret</span><span class="p">;</span>
<span class="kt">void</span> <span class="nf">renderMarkdown</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">markdown</span><span class="p">){</span>
<span class="n">Py_NoSiteFlag</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">Py_FrozenFlag</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">Py_IgnoreEnvironmentFlag</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">Py_SetProgramName</span><span class="p">((</span><span class="s">""</span><span class="p">));</span>
<span class="kt">char</span> <span class="n">buf</span><span class="p">[</span><span class="mi">2048</span><span class="p">];</span>
<span class="n">getcwd</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">buf</span><span class="p">));</span>
<span class="n">strcat</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="s">"/iZeste.app/Contents/Resources/"</span><span class="p">);</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">buf</span><span class="p">);</span> <span class="c1">///Users/Cirdo/Library/Developer/Xcode/DerivedData/iZeste-dycjahkgbpkxjmbmznckrqticjxv/Build/Products/Debug/iZeste.app/Contents/Resources/</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">Py_GetPythonHome</span><span class="p">());</span> <span class="c1">//NULL</span>
<span class="n">Py_SetPythonHome</span><span class="p">(</span><span class="n">buf</span><span class="p">);</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%s</span><span class="se">\n</span><span class="s">r"</span><span class="p">,</span> <span class="n">Py_GetPythonHome</span><span class="p">());</span> <span class="c1">///Users/Cirdo/Library/Developer/Xcode/DerivedData/iZeste-dycjahkgbpkxjmbmznckrqticjxv/Build/Products/Debug/iZeste.app/Contents/Resources/</span>
<span class="n">Py_Initialize</span><span class="p">();</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">PY_VERSION</span><span class="p">);</span> <span class="c1">//2.7.6</span>
<span class="n">PySys_SetPath</span><span class="p">(</span><span class="s">"."</span><span class="p">);</span>
<span class="c1">// Py_SetPythonHome(buf);</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">PyImport_ImportModule</span><span class="p">(</span><span class="s">"markdownHtml"</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">module</span><span class="p">){</span>
<span class="n">argument</span> <span class="o">=</span> <span class="n">Py_BuildValue</span><span class="p">(</span><span class="s">"(s)"</span><span class="p">,</span> <span class="n">markdown</span><span class="p">);</span>
<span class="n">function</span> <span class="o">=</span> <span class="n">PyObject_GetAttrString</span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="s">"markdown_python"</span><span class="p">);</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">PyEval_CallObject</span><span class="p">(</span><span class="n">function</span><span class="p">,</span> <span class="n">argument</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">PyString_Check</span><span class="p">(</span><span class="n">ret</span><span class="p">)){</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%s"</span><span class="p">,</span> <span class="n">PyString_AS_STRING</span><span class="p">(</span><span class="n">ret</span><span class="p">));</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">PyErr_Print</span><span class="p">();</span>
<span class="n">Py_DECREF</span><span class="p">(</span><span class="n">function</span><span class="p">);</span>
<span class="n">Py_DECREF</span><span class="p">(</span><span class="n">module</span><span class="p">);</span>
<span class="n">Py_DECREF</span><span class="p">(</span><span class="n">argument</span><span class="p">);</span>
<span class="n">Py_DECREF</span><span class="p">(</span><span class="n">ret</span><span class="p">);</span>
<span class="n">Py_Finalize</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>Des erreurs d'imports avec l'api python en C, message #503312015-04-05T11:42:46+02:00Kje/@Kjehttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50331<p>C'est censé etre dans la lib standard. Tu es surs que ton code initialise correctement l'interpréteur ? J'ai l'impression qu'il ne trouve rien de ce qui est dans la lib standard. Ton python path il a quelle tête ? Car là visiblement tu ne trouve rien de la lib standard. </p>Des erreurs d'imports avec l'api python en C, message #503232015-04-05T11:19:45+02:00Cirdo/@Cirdohttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50323<p>J'ai enlevé les imports <code>__future__</code> et <code>logging</code>. Maintenant il me trouve pas le module <code>xml.etree.ElementTree</code>. Tu aurais une idée d'où ça peut venir Kje ?</p>Des erreurs d'imports avec l'api python en C, message #503172015-04-05T10:47:31+02:00Kje/@Kjehttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50317<p>Note que de mémoire, dans Python-Markdown, les <code>__future__</code> sont surtout utilisé pour de l'import relatif, ce qui doit fonctionner out-of-the-box avec la 2.7 et est de toute façon facile a corriger.</p>Des erreurs d'imports avec l'api python en C, message #503102015-04-05T10:10:58+02:00Kje/@Kjehttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50310<p>Si tu veux mais tu va devoir modifier le code en conséquence… Car normalement c'est l'interpréteur python qui se charge de le prendre en compte.</p>Des erreurs d'imports avec l'api python en C, message #503052015-04-05T09:49:44+02:00Cirdo/@Cirdohttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50305<p>La lib utilise la version <code>2.7.6</code>.</p>
<p>Du coup comme le module n'existe pas il faut l'enlever de tous les fichiers ?</p>Des erreurs d'imports avec l'api python en C, message #502902015-04-05T00:44:23+02:00Kje/@Kjehttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50290<p>Ce module est un module particulier qui inclus des fonctionnalités récentes qui permet de les utiliser dans les vieilles versions de python. Bref il n'existe pas en tant que tel, il est inclus dans l'interpréteur normalement. C'est quoi ta version de python que tu utilise ?</p>Des erreurs d'imports avec l'api python en C, message #502522015-04-04T19:17:03+02:00Cirdo/@Cirdohttps://zestedesavoir.com/forums/sujet/2777/des-erreurs-dimports-avec-lapi-python-en-c/?page=1#p50252<p>Salut à tous,</p>
<p>Depuis peu pour un projet d'éditeur/lecteur pour ZDS, je dois transformer un texte au format markdown au format HTML. Mon programme tourne en c (Objective-c pour être précis mais peut importe car on peut utiliser du code c dans du code objective-c <img alt=":)" src="/static/smileys/smile.png"> ).
J'ai créé une fonction python dans un fichier à part. </p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
6
7</pre></div></td><td class="code"><div class="codehilite"><pre><span class="kn">from</span> <span class="nn">markdown</span> <span class="kn">import</span> <span class="n">Markdown</span>
<span class="kn">from</span> <span class="nn">markdown.extensions.zds</span> <span class="kn">import</span> <span class="n">ZdsExtension</span>
<span class="kn">from</span> <span class="nn">smileys_definition</span> <span class="kn">import</span> <span class="n">smileys</span>
<span class="k">def</span> <span class="nf">markdown_python</span><span class="p">(</span><span class="n">markdown_string</span><span class="p">):</span>
<span class="n">render</span> <span class="o">=</span> <span class="n">Markdown</span><span class="p">(</span><span class="n">extensions</span><span class="o">=</span><span class="p">(</span><span class="n">ZdsExtension</span><span class="p">({</span><span class="s">'inline'</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span> <span class="s">'emoticons'</span><span class="p">:</span> <span class="n">smileys</span><span class="p">}),),</span><span class="n">safe_mode</span> <span class="o">=</span> <span class="s">'escape'</span><span class="p">,</span> <span class="n">enable_attributes</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span> <span class="n">tab_length</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span> <span class="n">output_format</span> <span class="o">=</span> <span class="s">'html5'</span><span class="p">,</span> <span class="n">smart_emphasis</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> <span class="n">lazy_ol</span> <span class="o">=</span> <span class="bp">True</span><span class="p">)</span><span class="o">.</span><span class="n">convert</span><span class="p">(</span><span class="n">markdown_string</span><span class="p">)</span>
<span class="k">return</span> <span class="n">render</span>
</pre></div>
</td></tr></table>
<p>Jusqu'à là rien de sorcier. </p>
<p>Le module <code>markdown</code> gère des dépendances qui sont : <code>__future__</code>, <code>codecs</code>…</p>
<p>Les ressources (image, fichier python…) des applications Cocoa généré par xCode sont dans le fichier <code>Resources</code>. Quand mon application s'execute, j'ai bien mes fichiers python mais j'ai une erreur d'import.</p>
<p>Le code c :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43</pre></div></td><td class="code"><div class="codehilite"><pre><span class="cp">#include "ZDSMarkdown.h"</span>
<span class="n">PyObject</span> <span class="o">*</span><span class="n">module</span><span class="p">,</span> <span class="o">*</span><span class="n">argument</span><span class="p">,</span> <span class="o">*</span><span class="n">function</span><span class="p">,</span> <span class="o">*</span><span class="n">ret</span><span class="p">;</span>
<span class="kt">void</span> <span class="nf">renderMarkdown</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">markdown</span><span class="p">){</span>
<span class="n">Py_NoSiteFlag</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">Py_FrozenFlag</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">Py_IgnoreEnvironmentFlag</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="kt">char</span> <span class="n">buf</span><span class="p">[</span><span class="mi">2048</span><span class="p">];</span> <span class="c1">//Variable (mal nommée) du chemin où se trouve les fichiers python</span>
<span class="n">getcwd</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">buf</span><span class="p">));</span>
<span class="n">strcat</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="s">"/iZeste.app/Contents/Resources"</span><span class="p">);</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">buf</span><span class="p">);</span>
<span class="n">Py_SetPythonHome</span><span class="p">(</span><span class="n">buf</span><span class="p">);</span>
<span class="n">Py_Initialize</span><span class="p">();</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">PY_VERSION</span><span class="p">);</span>
<span class="n">PySys_SetPath</span><span class="p">(</span><span class="n">buf</span><span class="p">);</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">PyImport_ImportModule</span><span class="p">(</span><span class="s">"markdownHtml"</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">module</span><span class="p">){</span>
<span class="n">argument</span> <span class="o">=</span> <span class="n">Py_BuildValue</span><span class="p">(</span><span class="s">"(s)"</span><span class="p">,</span> <span class="n">markdown</span><span class="p">);</span>
<span class="n">function</span> <span class="o">=</span> <span class="n">PyObject_GetAttrString</span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="s">"markdown_python"</span><span class="p">);</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">PyEval_CallObject</span><span class="p">(</span><span class="n">function</span><span class="p">,</span> <span class="n">argument</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">PyString_Check</span><span class="p">(</span><span class="n">ret</span><span class="p">)){</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%s"</span><span class="p">,</span> <span class="n">PyString_AS_STRING</span><span class="p">(</span><span class="n">ret</span><span class="p">));</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">PyErr_Print</span><span class="p">();</span>
<span class="n">Py_DECREF</span><span class="p">(</span><span class="n">function</span><span class="p">);</span>
<span class="n">Py_DECREF</span><span class="p">(</span><span class="n">module</span><span class="p">);</span>
<span class="n">Py_DECREF</span><span class="p">(</span><span class="n">argument</span><span class="p">);</span>
<span class="n">Py_DECREF</span><span class="p">(</span><span class="n">ret</span><span class="p">);</span>
<span class="n">Py_Finalize</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
<p>La fonction <code>PyErr_Print();</code> me sort :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
6</pre></div></td><td class="code"><div class="codehilite"><pre><span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">):</span>
<span class="n">File</span> <span class="s">"/Users/Cirdo/Library/Developer/Xcode/DerivedData/iZeste-dycjahkgbpkxjmbmznckrqticjxv/Build/Products/Debug/iZeste.app/Contents/Resources/markdownHtml.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi">1</span><span class="p">,</span> <span class="ow">in</span> <span class="o"><</span><span class="n">module</span><span class="o">></span>
<span class="kn">from</span> <span class="nn">markdown</span> <span class="kn">import</span> <span class="n">Markdown</span>
<span class="n">File</span> <span class="s">"/Users/Cirdo/Library/Developer/Xcode/DerivedData/iZeste-dycjahkgbpkxjmbmznckrqticjxv/Build/Products/Debug/iZeste.app/Contents/Resources/markdown/__init__.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi">33</span><span class="p">,</span> <span class="ow">in</span> <span class="o"><</span><span class="n">module</span><span class="o">></span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">absolute_import</span>
<span class="ne">ImportError</span><span class="p">:</span> <span class="n">No</span> <span class="n">module</span> <span class="n">named</span> <span class="n">__future__</span>
</pre></div>
</td></tr></table>
<p>Il me trouve pas le module <code>__future__</code>.
Où est ce module ? Comment faire pour l'intégrer ? </p>