2009-01-29 9 views
10

J'ai un paquet mis en place comme ceci:Python: Problème avec des modules locaux modules globaux shadowing

packagename/ 
    __init__.py 
    numbers.py 
    tools.py 
    ...other stuff 

maintenant à l'intérieur tools.py, je suis en train d'importer le module de bibliothèque standard fractions. Cependant, le module fractions lui-même importe le module numbers, qui est supposé être celui de la bibliothèque standard.

Le problème est qu'il tente d'importer les modules de numbersmon paquet à la place (c.-à-mon numbers.py est shadowing le module stdlib numbers), et se plaint ensuite à ce sujet, au lieu d'importer le module stdlib.

Ma question est, est-il une solution de contournement pour que je puisse garder la structure actuelle de mon paquet, ou est la seule solution pour renommer mon propre module fautif (numbers.py)?

+0

Désolé, devrait avoir lu TFQ plus à fond. Quoi qu'il en soit, j'essaie de reproduire le problème maintenant, mais je ne peux pas. Comment exécutez-vous le code lorsque l'erreur se produit? Je peux seulement le reproduire quand je cours le code de l'intérieur du paquet. –

Répondre

4

J'essaie d'éviter d'occulter la bibliothèque standard. Pourquoi ne pas renommer votre module en "_numbers.py"?

Et bien sûr, vous pouvez toujours faire:

import _numbers as numbers