2017-10-19 3 views
0

Ceci est ma structure de répertoire.Python - ValueError: Tentative d'importation relative dans un non-package

PyCharm 
    Python 
     PRD 
      _AppFunc 
       DbUtils.py 
       __init__.py 

      _AppCode 
       DataExtract.py 
       __init__.py 

      __init__.py 

     __init__.py 

Et mon PYTHONPATH est réglé sur C: \ Users \ nom d'utilisateur \ Desktop \ PyCharm \ Python \ PRD

En DataExtract.py Je suis en train d'importer DbUtils.py en utilisant

from .._AppFunc import DbUtils 

et obtenir cette erreur ...

Traceback (most recent call last): 
File "C:\Users\username\Desktop\PyCharm\Python\PRD\_AppCode\DataExtract.py", line 36, in <module> from .._AppFunc import DbUtils 
ValueError: Attempted relative import in non-package 

Si je déménage DBUtils.py de dossier _AppFunc et sous PRD, il fonctionne très bien. Mais j'ai l'intention de le garder dans un dossier séparé pour restreindre l'accès.

J'ai lu la plupart des stack overflow threads liés à cela et python doc on intra-package-references mais je ne pouvais pas le faire fonctionner.

Comment puis-je faire!?

Répondre

0

Voici ce qui a fonctionné ...

  1. Le PYTHONPATH doit être réglé à la racine. Pour la structure de répertoire en question, il est C:\Users\username\Desktop\PyCharm
  2. Chaque dossier et sous-dossier dans la structure à partir de la racine doit être un paquet. Copier la pâte __init__.py et __init__.pyc
  3. Le module est importé dans le fichier principal par une référence de chemin complet. Pour cette question, il est Python.PRD._AppFunc import DbUtils