<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"	>
<channel>
	<title>Komentarze do: Python: wzajemne importowanie modułów</title>
	<atom:link href="http://room-303.com/blog/2009/07/22/python-wzajemne-importowanie-modulow/feed/" rel="self" type="application/rss+xml" />
	<link>http://room-303.com/blog/2009/07/22/python-wzajemne-importowanie-modulow/</link>
	<description>Bug to the Feature</description>
	<lastBuildDate>Fri, 05 Mar 2010 09:43:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Autor: japhy</title>
		<link>http://room-303.com/blog/2009/07/22/python-wzajemne-importowanie-modulow/comment-page-1/#comment-24484</link>
		<dc:creator>japhy</dc:creator>
		<pubDate>Wed, 22 Jul 2009 21:34:20 +0000</pubDate>
		<guid isPermaLink="false">http://room-303.com/blog/?p=629#comment-24484</guid>
		<description>Zabawne, i &quot;print foo.c&quot; w bar.py rzuca AttributeError, a nie błąd w imporcie - czyli dostajemy częściowo załadowany moduł; cel pewnie jest taki, żeby móc się do całości modułu odwołać już w funkcji czy metodzie, wtedy nazwa rozwijana jest dopiero po załadowaniu całego foo - ale fajnie musi się coś takiego debugować ;)

O Haystacku pisałem na podstawie jego dokumentacji, jeszcze go nie używałem; może bardziej zaawansowane wykorzystanie robi pętle - ale to IMO więcej kłopotu niż to warte (właśnie ze względu na zabawę z debugowaniem jeśli jednak coś pójdzie inaczej, niż myślimy - a kiedyś pójdzie).</description>
		<content:encoded><![CDATA[<p>Zabawne, i „print foo.c” w bar.py rzuca AttributeError, a nie błąd w imporcie — czyli dostajemy częściowo załadowany moduł; cel pewnie jest taki, żeby móc się do całości modułu odwołać już w funkcji czy metodzie, wtedy nazwa rozwijana jest dopiero po załadowaniu całego foo — ale fajnie musi się coś takiego debugować ;)</p>
<p>O Haystacku pisałem na podstawie jego dokumentacji, jeszcze go nie używałem; może bardziej zaawansowane wykorzystanie robi pętle — ale to IMO więcej kłopotu niż to warte (właśnie ze względu na zabawę z debugowaniem jeśli jednak coś pójdzie inaczej, niż myślimy — a kiedyś pójdzie).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Patrys</title>
		<link>http://room-303.com/blog/2009/07/22/python-wzajemne-importowanie-modulow/comment-page-1/#comment-24483</link>
		<dc:creator>Patrys</dc:creator>
		<pubDate>Wed, 22 Jul 2009 20:00:44 +0000</pubDate>
		<guid isPermaLink="false">http://room-303.com/blog/?p=629#comment-24483</guid>
		<description>japhy:

Oczywiście, że w jedną stronę możesz zażyczyć sobie &lt;code&gt;import foo&lt;/code&gt; albo i &lt;code&gt;from foo import *&lt;/code&gt;. Sprawdzenie tego nie zajmie ci więcej czasu niż napisanie komentarza.

W cale nie pudło. Ostatnio problem w biurze był właśnie z aplikacją third-party (nazwy nie podam), która do spółki z Haystackiem tworzyła pętlę zależności (Haystack &lt;em&gt;wymusza&lt;/em&gt; wczesne załadowanie &lt;code&gt;urls&lt;/code&gt;, sprawdź w kodzie; obie aplikacje robiły swoje autodiscover metodą brute-force).</description>
		<content:encoded><![CDATA[<p>japhy:</p>
<p>Oczywiście, że w jedną stronę możesz zażyczyć sobie <code>import foo</code> albo i <code>from foo import *</code>. Sprawdzenie tego nie zajmie ci więcej czasu niż napisanie komentarza.</p>
<p>W cale nie pudło. Ostatnio problem w biurze był właśnie z aplikacją third-party (nazwy nie podam), która do spółki z Haystackiem tworzyła pętlę zależności (Haystack <em>wymusza</em> wczesne załadowanie <code>urls</code>, sprawdź w kodzie; obie aplikacje robiły swoje autodiscover metodą brute-force).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: japhy</title>
		<link>http://room-303.com/blog/2009/07/22/python-wzajemne-importowanie-modulow/comment-page-1/#comment-24482</link>
		<dc:creator>japhy</dc:creator>
		<pubDate>Wed, 22 Jul 2009 18:57:15 +0000</pubDate>
		<guid isPermaLink="false">http://room-303.com/blog/?p=629#comment-24482</guid>
		<description>Jest częściowe, bo kompletnego nie bardzo jest jak zaimplementować (nie zrobisz &quot;from foo import *&quot;, a nawet &quot;import foo&quot; w bar.py, prawda?).

A Haystacka albo importuję w models.py i sam wołam haystack.site.register() - albo:
1. w urls.py projektu importuję haystack
2. wołam haystack.autodiscover()
3. autodiscover importuje search_indexes.py w tych aplikacjach, w których jest dostępne
4. search_indexes.py może spokojnie zaimportować haystack - już został wcześniej zaimportowany przez urls.py, moduł jest już w pamięci.
Discovery nie leci w czasie importowania haystacka - jest wykonywane później.  Więc pudło.</description>
		<content:encoded><![CDATA[<p>Jest częściowe, bo kompletnego nie bardzo jest jak zaimplementować (nie zrobisz „from foo import *”, a nawet „import foo” w bar.py, prawda?).</p>
<p>A Haystacka albo importuję w models.py i sam wołam haystack.site.register() — albo:<br />
1. w urls.py projektu importuję haystack<br />
2. wołam haystack.autodiscover()<br />
3. autodiscover importuje search_indexes.py w tych aplikacjach, w których jest dostępne<br />
4. search_indexes.py może spokojnie zaimportować haystack — już został wcześniej zaimportowany przez urls.py, moduł jest już w pamięci.<br />
Discovery nie leci w czasie importowania haystacka — jest wykonywane później.  Więc pudło.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Patrys</title>
		<link>http://room-303.com/blog/2009/07/22/python-wzajemne-importowanie-modulow/comment-page-1/#comment-24481</link>
		<dc:creator>Patrys</dc:creator>
		<pubDate>Wed, 22 Jul 2009 15:12:09 +0000</pubDate>
		<guid isPermaLink="false">http://room-303.com/blog/?p=629#comment-24481</guid>
		<description>japhy:

Powinno być &quot;a&quot;, literówka.

Dlaczego &quot;częściowe&quot; wsparcie? Jest kompletne. Po co? Choćby Haystack - pierwsza z brzegu aplikacja Django, która importuje pozostałe aplikacje projektu, zbierając modele ORM do indeksowania. Z kolei twój kod chciałby pewnie móc coś w tym ideksie wyszukać, co wymaga zaimportowania Haystacka.</description>
		<content:encoded><![CDATA[<p>japhy:</p>
<p>Powinno być „a”, literówka.</p>
<p>Dlaczego „częściowe” wsparcie? Jest kompletne. Po co? Choćby Haystack — pierwsza z brzegu aplikacja Django, która importuje pozostałe aplikacje projektu, zbierając modele ORM do indeksowania. Z kolei twój kod chciałby pewnie móc coś w tym ideksie wyszukać, co wymaga zaimportowania Haystacka.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: japhy</title>
		<link>http://room-303.com/blog/2009/07/22/python-wzajemne-importowanie-modulow/comment-page-1/#comment-24480</link>
		<dc:creator>japhy</dc:creator>
		<pubDate>Wed, 22 Jul 2009 15:00:48 +0000</pubDate>
		<guid isPermaLink="false">http://room-303.com/blog/?p=629#comment-24480</guid>
		<description>Eee… a czy w trzeciej linijce bar.py nie powinno być przypadkiem &quot;import c&quot; albo &quot;import a&quot;?  Nie do końca rozumiem, jak to miałoby działać - czy jeśli importowana z pętli zmienna jest zdefiniowana (przypisana) powyżej, a następnie zredefiniowana *poniżej* importu tworzącego pętlę - czy z pętli dostaniemy pierwszą wartość, czy błąd?  Co jeśli zamiast redefinicji mamy zmianę mutowalnego stanu?

Wydaje mi się, że częściowe wsparcie dla pętli importów to więcej zamętu niż korzyści.  Bo i właściwie po co?</description>
		<content:encoded><![CDATA[<p>Eee… a czy w trzeciej linijce bar.py nie powinno być przypadkiem „import c” albo „import a”?  Nie do końca rozumiem, jak to miałoby działać — czy jeśli importowana z pętli zmienna jest zdefiniowana (przypisana) powyżej, a następnie zredefiniowana *poniżej* importu tworzącego pętlę — czy z pętli dostaniemy pierwszą wartość, czy błąd?  Co jeśli zamiast redefinicji mamy zmianę mutowalnego stanu?</p>
<p>Wydaje mi się, że częściowe wsparcie dla pętli importów to więcej zamętu niż korzyści.  Bo i właściwie po co?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: jarek</title>
		<link>http://room-303.com/blog/2009/07/22/python-wzajemne-importowanie-modulow/comment-page-1/#comment-24479</link>
		<dc:creator>jarek</dc:creator>
		<pubDate>Wed, 22 Jul 2009 14:43:25 +0000</pubDate>
		<guid isPermaLink="false">http://room-303.com/blog/?p=629#comment-24479</guid>
		<description>Dla mnie zmorą są importy zaszyte np. w środku (pół biedy gdy są zaraz obok definicji) metody/funkcji. 
Czasami ciężko się połapać w takich potworkach jeśli są nieudokumentowane przez co wdrażanie/testowanie aplikacji jest o wiele bardziej upierdliwe nie mówiąc o pracy z takim kodem.</description>
		<content:encoded><![CDATA[<p>Dla mnie zmorą są importy zaszyte np. w środku (pół biedy gdy są zaraz obok definicji) metody/funkcji.<br />
Czasami ciężko się połapać w takich potworkach jeśli są nieudokumentowane przez co wdrażanie/testowanie aplikacji jest o wiele bardziej upierdliwe nie mówiąc o pracy z takim kodem.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
