Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2022-04-30T11:56:23+02:00Les derniers messages parus sur le forum de Zeste de Savoir.pykage, message #2425182022-04-30T11:56:23+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/16233/pykage/?page=1#p242518<blockquote>
<p>(attention cependant, il y a quelques fichiers non souhaités comme les fichiers <code>.DS_Store</code>), c’est plutôt clair et bien découpé.</p>
</blockquote>
<figure><blockquote>
<p></p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/16233/pykage/?page=1#p242516">entwanne</a></figcaption></figure>
<p>ah oui , j’ai encore oublie de supprimer les petits fichiers (genre .idea(ah non je l’ai corrige), .ds-store etc) <img src="/static/smileys/svg/rouge.svg" alt=":honte:" class="smiley"> </p>
<blockquote>
<p>Par rapport à ton projet, c’est quelque chose que tu envisages comme une alternative à pip ?</p>
</blockquote>
<p>oui mais ca utilise pip malheureusement pour installer les packages(j’avais pas envie de creer mon propre installer , un debut je voulais le faire mais je m’aperçois que les packages c en python sont très durs a installer , comme pandas ou numpy mais j’ai abandonne , pfff les whl , et les egg)</p>
<blockquote>
<p>J’ai l’habitude quand je relis du code de commencer par les tests, ça permet d’avoir un bon aperçu de ce que ça fait et comment ça fonctionne. Bon là ils vont très vite à lire on va dire. <img src="/static/smileys/svg/heureux.svg" alt=":D" class="smiley"></p>
</blockquote>
<p>ah oui , mais c’est un peu dur de tester un print ou une sortie <img src="/static/smileys/svg/clin.svg" alt=";)" class="smiley"> , oui j’aurais pu <img src="/static/smileys/svg/rouge.svg" alt=":honte:" class="smiley"> </p>
<blockquote>
<p>Sinon une petite remarque comme ça, je vois que tu utilises plusieurs opérations comme os.path ou os.getcwd : sache que Python embarque un module pathlib qui est très utile pour gérer des chemins de fichiers </p>
</blockquote>
<p>je le sais mais j’oublie tout le temps je vais corriger cela</p>
<blockquote>
<p>Par ailleurs les sys.path.append(’..’) sont souvent des nids à ennuis, tu n’en as normalement pas besoin si ton projet est correctement packagé</p>
</blockquote>
<p>je n’en ai plus besoin , j’en ai deja supprimer un gros bout mais il en reste</p>
<blockquote>
<p>Aussi tu n’as pas besoin de convertir les valeurs en booléens dans une condition if (j’ai vu un if bool(self.path_pkg) ou if bool(document.text)), c’est déjà fait implicitement par le if !</p>
</blockquote>
<p>ah oui , encore une erreur de ma part , je vais corriger cela</p>
<blockquote>
<p>Pour ta classe bcolors tu pourrais utiliser une Enum, c’est pile le cas d’usage pour.</p>
</blockquote>
<p>Bonne idee ! </p>
<blockquote>
<p>Dans ton code j’ai vu un all([bar for foo in …]), il faut savoir qu tu n’as pas besoin d’une liste ici : all accepte n’importe quel itérable et tu peux donc lui passer une expression génératrice (all(bar for foo in …) sans crochets), mais encore une fois tu dois le savoir parce que tu utilises ce pattern à d’autres endroits</p>
</blockquote>
<p>ah oui je ne sais pas, parfois j’ai la tête en l’air et j’oublie qu’il y a une façon plus facil a écrire !
et bah merci beaucoup pour le temps que tu as regarde mon code <img src="/static/smileys/svg/rire.svg" alt=":lol:" class="smiley"> </p>pykage, message #2425162022-04-30T11:01:50+02:00entwanne/@entwannehttps://zestedesavoir.com/forums/sujet/16233/pykage/?page=1#p242516<p>Salut,</p>
<p>Le dépôt a l’air bien organisé en tout cas (attention cependant, il y a quelques fichiers non souhaités comme les fichiers <code>.DS_Store</code>), c’est plutôt clair et bien découpé.</p>
<p>Par rapport à ton projet, c’est quelque chose que tu envisages comme une alternative à <code>pip</code> ?</p>
<p>J’ai l’habitude quand je relis du code de commencer par les tests, ça permet d’avoir un bon aperçu de ce que ça fait et comment ça fonctionne. Bon là ils vont très vite à lire on va dire. <img src="/static/smileys/svg/heureux.svg" alt=":D" class="smiley"></p>
<p>Sinon une petite remarque comme ça, je vois que tu utilises plusieurs opérations comme <code>os.path</code> ou <code>os.getcwd</code> : sache que <a href="https://zestedesavoir.com/tutoriels/2514/un-zeste-de-python/8-bibliotheque-standard/1-apercu/#3-3-pathlib">Python embarque un module <code>pathlib</code></a> qui est très utile pour gérer des chemins de fichiers (je vois d’ailleurs que tu l’utilises à certains endroits).<br>
Par ailleurs les <code>sys.path.append('..')</code> sont souvent des nids à ennuis, tu n’en as normalement pas besoin si ton projet est correctement <em>packagé</em> (en plus tu le fais à plusieurs endroits, donc tu dois avoir beaucoup de <code>..</code> dans ton <em>PYTHONPATH</em> à la fin).</p>
<p>Aussi tu n’as pas besoin de convertir les valeurs en booléens dans une condition if (j’ai vu un <code>if bool(self.path_pkg)</code> ou <code>if bool(document.text)</code>), c’est déjà fait implicitement par le <code>if</code> !</p>
<p>Pour ta classe <code>bcolors</code> tu pourrais utiliser une <code>Enum</code>, c’est pile le cas d’usage pour.</p>
<p>Dans ton code j’ai vu un <code>all([bar for foo in ...])</code>, il faut savoir qu tu n’as pas besoin d’une liste ici : <code>all</code> accepte n’importe quel itérable et tu peux donc lui passer une expression génératrice (<code>all(bar for foo in ...)</code> sans crochets), mais encore une fois tu dois le savoir parce que tu utilises ce <em>pattern</em> à d’autres endroits.</p>pykage, message #2425152022-04-29T23:50:51+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/16233/pykage/?page=1#p242515<p>bonjour, j’ai créer (plutôt j’ai essayer de créer ) un package manager pour python , il ne marche pas encore (il y a encore quelque bug important) on peut dire que c’est une version sous aplha , mais j’ai la flemme de faire des petites choses mais comment même très important genre mettre a jour mon readme.md car mon nom a change (anciennement pykg(py + (p)kg) qui étais déjà pris) ou renommer certains dossier . je l’ai mie sur pypi mais je me suis aperçus que même la version qui est en ligne ne marchais pas , je sais c’est une catastrophe mais pouvez regardez mon projet et me proposer des ameliorations, pour l’instant il y a que les methodes install, add, run, init
mon repo github : <a href="https://github.com/pykage/pykage.git">https://github.com/pykage/pykage.git</a>
ATTENTION SI VOUS VOULEZ L’INSTALLEZ (j’en doute <img src="/static/smileys/svg/triste.svg" alt=":(" class="smiley"> ) me le parlez par ce sujet , je le teste sur windows et il ne semple pas marcher sur le mien par contre sur mac et linux oui , installe poetry aussi desole pour mon projet plein de bug</p>Accéder aux sous-modules, message #505252015-04-06T15:51:07+02:00Vayel/@Vayelhttps://zestedesavoir.com/forums/sujet/2797/acceder-aux-sous-modules/?page=1#p50525<p>Merci !</p>Accéder aux sous-modules, message #505232015-04-06T15:45:34+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/2797/acceder-aux-sous-modules/?page=1#p50523<figure><blockquote>
<p>C'est ce que j'avais fait au départ, et ça fonctionnait : je pouvais importer, depuis <code>main.py</code>, le module <code>mpf.analysis.production.views</code>. Mais, par contre, il y a toujours une erreur pour <code>mpf.analysis.production.views.crude</code>. </p>
<p><code>mpf/analysis/production/__init__.py</code> :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2</pre></div></td><td class="code"><div class="codehilite"><pre><span class="o">...</span>
<span class="kn">import</span> <span class="nn">views</span>
</pre></div>
</td></tr></table>
<p><code>main.py</code> :</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">mpf.analysis</span> <span class="kn">import</span> <span class="n">production</span>
<span class="k">print</span><span class="p">(</span><span class="nb">dir</span><span class="p">(</span><span class="n">production</span><span class="p">))</span>
<span class="o">>>></span> <span class="p">[</span><span class="s">'LinRegErrorStats'</span><span class="p">,</span> <span class="s">'LinearRegression'</span><span class="p">,</span> <span class="s">'MovingAveraging'</span><span class="p">,</span> <span class="s">'__builtins__'</span><span class="p">,</span> <span class="s">'__cached__'</span><span class="p">,</span> <span class="s">'__doc__'</span><span class="p">,</span> <span class="s">'__file__'</span><span class="p">,</span> <span class="s">'__loader__'</span><span class="p">,</span> <span class="s">'__name__'</span><span class="p">,</span> <span class="s">'__package__'</span><span class="p">,</span> <span class="s">'__path__'</span><span class="p">,</span> <span class="s">'__spec__'</span><span class="p">,</span> <span class="s">'linear_regression'</span><span class="p">,</span> <span class="s">'linear_regression_error_stats'</span><span class="p">,</span> <span class="s">'moving_averaging'</span><span class="p">,</span> <span class="s">'views'</span><span class="p">]</span>
<span class="k">print</span><span class="p">(</span><span class="nb">dir</span><span class="p">(</span><span class="n">production</span><span class="o">.</span><span class="n">views</span><span class="p">))</span>
<span class="o">>>></span> <span class="p">[</span><span class="s">'__doc__'</span><span class="p">,</span> <span class="s">'__loader__'</span><span class="p">,</span> <span class="s">'__name__'</span><span class="p">,</span> <span class="s">'__package__'</span><span class="p">,</span> <span class="s">'__path__'</span><span class="p">,</span> <span class="s">'__spec__'</span><span class="p">]</span>
</pre></div>
</td></tr></table>
</blockquote>
<figcaption><p><a href="http://zestedesavoir.com/forums/sujet/2797/acceder-aux-sous-modules/?page=1#p50521">Vayel</a></p></figcaption></figure><p>Tu as oublié le <code>.</code> devant le <code>views</code> pour ton import, du coup tu importe probablement un autre module <code>views</code> extérieur à toute cette arborescence.</p>
<figure><blockquote>
<p>D'ailleurs, pourquoi puis-je importer <code>production</code> de <code>mpf.analysis</code> alors que mon <code>mpf/analysis/__init__.py</code> contient uniquement cela :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1</pre></div></td><td class="code"><div class="codehilite"><pre><span class="kn">from</span> <span class="nn">.abstracts</span> <span class="kn">import</span> <span class="n">AbstractAnalysis</span>
</pre></div>
</td></tr></table>
</blockquote>
<figcaption><p><a href="http://zestedesavoir.com/forums/sujet/2797/acceder-aux-sous-modules/?page=1#p50521">Vayel</a></p></figcaption></figure><p>Parce que tu l'importes explicitement avec <code>from mpf.analysis import production</code>. Tu pourrais aussi bien faire <code>from mpf.analysis.production import views</code>.</p>
<hr>
<p>Concernant les imports absolus ou relatifs, dans un package il est bien plus judicieux d'utiliser les relatifs. Ainsi tu pourras facilement modifier/corriger/déplacer tes modules et tes sous-packages sans avoir besoin de modifier tous les imports dans les modules.</p>Accéder aux sous-modules, message #505212015-04-06T15:24:05+02:00Vayel/@Vayelhttps://zestedesavoir.com/forums/sujet/2797/acceder-aux-sous-modules/?page=1#p50521<p>C'est ce que j'avais fait au départ, et ça fonctionnait : je pouvais importer, depuis <code>main.py</code>, le module <code>mpf.analysis.production.views</code>. Mais, par contre, il y a toujours une erreur pour <code>mpf.analysis.production.views.crude</code>. </p>
<p><code>mpf/analysis/production/__init__.py</code> :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2</pre></div></td><td class="code"><div class="codehilite"><pre><span class="o">...</span>
<span class="kn">import</span> <span class="nn">views</span>
</pre></div>
</td></tr></table>
<p><code>main.py</code> :</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">mpf.analysis</span> <span class="kn">import</span> <span class="n">production</span>
<span class="k">print</span><span class="p">(</span><span class="nb">dir</span><span class="p">(</span><span class="n">production</span><span class="p">))</span>
<span class="o">>>></span> <span class="p">[</span><span class="s">'LinRegErrorStats'</span><span class="p">,</span> <span class="s">'LinearRegression'</span><span class="p">,</span> <span class="s">'MovingAveraging'</span><span class="p">,</span> <span class="s">'__builtins__'</span><span class="p">,</span> <span class="s">'__cached__'</span><span class="p">,</span> <span class="s">'__doc__'</span><span class="p">,</span> <span class="s">'__file__'</span><span class="p">,</span> <span class="s">'__loader__'</span><span class="p">,</span> <span class="s">'__name__'</span><span class="p">,</span> <span class="s">'__package__'</span><span class="p">,</span> <span class="s">'__path__'</span><span class="p">,</span> <span class="s">'__spec__'</span><span class="p">,</span> <span class="s">'linear_regression'</span><span class="p">,</span> <span class="s">'linear_regression_error_stats'</span><span class="p">,</span> <span class="s">'moving_averaging'</span><span class="p">,</span> <span class="s">'views'</span><span class="p">]</span>
<span class="k">print</span><span class="p">(</span><span class="nb">dir</span><span class="p">(</span><span class="n">production</span><span class="o">.</span><span class="n">views</span><span class="p">))</span>
<span class="o">>>></span> <span class="p">[</span><span class="s">'__doc__'</span><span class="p">,</span> <span class="s">'__loader__'</span><span class="p">,</span> <span class="s">'__name__'</span><span class="p">,</span> <span class="s">'__package__'</span><span class="p">,</span> <span class="s">'__path__'</span><span class="p">,</span> <span class="s">'__spec__'</span><span class="p">]</span>
</pre></div>
</td></tr></table>
<p>D'ailleurs, pourquoi puis-je importer <code>production</code> de <code>mpf.analysis</code> alors que mon <code>mpf/analysis/__init__.py</code> contient uniquement cela :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1</pre></div></td><td class="code"><div class="codehilite"><pre><span class="kn">from</span> <span class="nn">.abstracts</span> <span class="kn">import</span> <span class="n">AbstractAnalysis</span>
</pre></div>
</td></tr></table>
<p>Merci !</p>
<p><strong>PS :</strong> dans les <code>__init__.py</code>, est-il préférable de faire <code>from .blabla import truc</code> ou <code>from mpf.module.blabla import truc</code> ? La seconde méthode m'avait posé des problèmes, mais j'ignore un peu pourquoi.</p>Accéder aux sous-modules, message #505202015-04-06T15:17:01+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/2797/acceder-aux-sous-modules/?page=1#p50520<p>En Python 3, les sous-packages ne sont pas importés automatiquement. Il faut que dans ton module <code>...\production\__init__.py</code> tu importes le sous-package <code>views</code>.</p>
<p>Edit: Pour être plus précis, quand tu importes un package, Python ne lit que le <code>__init__.py</code>.</p>Accéder aux sous-modules, message #505142015-04-06T14:35:31+02:00Vayel/@Vayelhttps://zestedesavoir.com/forums/sujet/2797/acceder-aux-sous-modules/?page=1#p50514<p>Bonjour,</p>
<p>Je travaille avec Python 3.4 et j'ai la structure de dossier suivante :</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</pre></div></td><td class="code"><div class="codehilite"><pre>mpf/
__init__.py
main.py
analysis/
__init__.py
abstracts.py
production/
__init__.py
moving_averaging.py
linear_regression.py
linear_regression_error_stats.py
views/
__init__.py
abstracts.py
crude.py
</pre></div>
</td></tr></table>
<p>Dans mon <code>main.py</code>, je charge le module <code>analysis.production</code> de la sorte : </p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1</pre></div></td><td class="code"><div class="codehilite"><pre><span class="kn">from</span> <span class="nn">mpf.analysis</span> <span class="kn">import</span> <span class="n">production</span>
</pre></div>
</td></tr></table>
<p>Puis j'en affiche le contenu :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2</pre></div></td><td class="code"><div class="codehilite"><pre><span class="k">print</span><span class="p">(</span><span class="nb">dir</span><span class="p">(</span><span class="n">production</span><span class="p">))</span>
<span class="o">>>></span> <span class="p">[</span><span class="s">'LinRegErrorStats'</span><span class="p">,</span> <span class="s">'LinearRegression'</span><span class="p">,</span> <span class="s">'MovingAveraging'</span><span class="p">,</span> <span class="s">'__builtins__'</span><span class="p">,</span> <span class="s">'__cached__'</span><span class="p">,</span> <span class="s">'__doc__'</span><span class="p">,</span> <span class="s">'__file__'</span><span class="p">,</span> <span class="s">'__loader__'</span><span class="p">,</span> <span class="s">'__name__'</span><span class="p">,</span> <span class="s">'__package__'</span><span class="p">,</span> <span class="s">'__path__'</span><span class="p">,</span> <span class="s">'__spec__'</span><span class="p">,</span> <span class="s">'linear_regression'</span><span class="p">,</span> <span class="s">'linear_regression_error_stats'</span><span class="p">,</span> <span class="s">'moving_averaging'</span><span class="p">]</span>
</pre></div>
</td></tr></table>
<p>Le <code>mpf/analysis/production/__init__.py</code> contient cela :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3</pre></div></td><td class="code"><div class="codehilite"><pre><span class="kn">from</span> <span class="nn">.moving_averaging</span> <span class="kn">import</span> <span class="n">MovingAveraging</span>
<span class="kn">from</span> <span class="nn">.linear_regression</span> <span class="kn">import</span> <span class="n">LinearRegression</span>
<span class="kn">from</span> <span class="nn">.linear_regression_error_stats</span> <span class="kn">import</span> <span class="n">LinRegErrorStats</span>
</pre></div>
</td></tr></table>
<p>et le <code>mpf/analysis/production/views/__init__.py</code> cela :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1</pre></div></td><td class="code"><div class="codehilite"><pre><span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">crude</span>
</pre></div>
</td></tr></table>
<p>Mais, depuis le <code>main.py</code>, un <code>view = production.views.crude.View()</code> me retourne une erreur : <code>AttributeError: 'module' object has no attribute 'views'</code>.</p>
<p>Merci. <img alt="^^" src="/static/smileys/hihi.png"></p>