Ben diskte aşağıdaki yapıda bir paket geliştiriyorum:Python paketlerimde ad alanı çakışmalarını standart kitaplık paketi adlarıyla nasıl çözerim?
foo/
__init__.py
xml.py
bar.py
moo.py
xml.py
paketi SAX akışı ayrıştırıcı kullanan diğer paket bileşenleri için bazı özel XML ayrıştırma ve çevirisini yapan bir sınıf sağlar.
import xml.sax
import xml.sax.handler
Ama bir uygulamada kullanmaya gittiğimde olsun: Yani onun içinde vardır
Traceback (most recent call last):
File "testxmlparser.py", line 15, in <module>
import foo.xml
File "~/code/foo/xml.py", line 39, in <module>
import xml.sax
ImportError: No module named sax
Bir ad çakışması var görünüyor. xml.py
'u xmlparser.py
gibi başka bir şeye yeniden adlandırırsam her şey beklendiği gibi çalışır. Ama bu yanlış bir şey gibi hissettiriyor. Python'da paket isimleri ve çözümü hakkında temel bir şey eksik gibi hissediyorum.
foo/xml.py
dosyasını yeniden adlandırmayla ilgili olmayan bu işi yapmak için uygun bir yol var mı? Yoksa çelişen isimlere gerçekten tek çözüm bu mu?
Düzenleme: "Standart Python modülleriyle aynı şeyleri adlandırmaktan kaçının" ... sanki bana bir mineshaft görünüyor. Değişen ve zamanla büyüyecek olan, standart modül seti olan hareketli bir hedeftir. Yani 'u gerçekten adında yaratıcılığınız olmadıkça, isminizle yeniden adlandırılan şeyleri yeniden adlandırın. Ayrıca, ben zaten foo
(foo
kullanmıyorum, ama kesinlikle benzersiz bir şey) ile benzersiz bir paket adı var, bu yeterli olmamalıdır?
Sorun, xml.sax'ın * benim * paketimde olmamasıdır. Yani göreli bir ithalatı işe yaramıyor. Bu aslında şu anda benim için başarısız oluyor. Python 'xml.sax''nın' foo.xml' paketime göreceli olmasını bekler, ama değil. –
Tam olarak peşindeydim. Teşekkürler! –