2017-02-07 1 views
0

からモジュールをインポート中に、私がしたい、私は非常に多くのstackoverflowの記事を見てきましたが、私はこの問題にPythonのエラー別のディレクトリ

マイファイルシステム

parent_folder 
    |folder1 
     |module1.py 
     |module2.py 
     |__init__.py 
    |folder2 
     |main.py 

を得ている理由を私は理解していませんmodule1.pyとmodule2.pyをmain.pyにインポートします。

私の__init__.pyファイルには、ここで次のよう

__all__=['module1','module2'] 

私はmain.py

from ..folder1 import * 

にしようとしている。しかし、これは私は、このエラーを与えるものですがあります

Traceback (most recent call last): 
File "main.py", line 2, in <module> 
from ..folder1 import * 
SystemError: Parent module '' not loaded, cannot perform relative import 

私はこれを1時間解決しようとしてきましたが、何も動いていません。助けてください。


編集:私は

+0

myapp │ entry.py │ └───package │ __init__.py │ __init__.pyc │ ├───folder1 │ module1.py │ __init__.py │ └───folder2 start.py __init__.py 

例ディレクトリ構造でのMyApp/entry.py以下

あなたのPAされているPATHにrentディレクトリを追加しましたか?その後、あなたは言及する必要はありません。 – DevD

答えて

0

(他に何も働いていなかった)絶対パスを使用してこれを解決し、私はあなたがfolder2folder1を転送して

from folder1 import * 

または多分あなたの場合を試すことを好みますあなたが試みることができるようにフォルダを保持したい

import sys 
sys.path.append("../") # or maybe sys.path.append("..") 
from folder1 import * 

あなたがシステムパスに追加したくない場合は、これはあなたのシステムパス にfolder1が追加されます私はpythonでこのようにそれを行うあなたの問題を解決

1

これを願っています

import os 
os.chdir("../") #or maybe os.chdir("..") 
from folder1 import * 

を試してみてくださいwebapp2。それが役に立ったら教えてください。

from folder1.module1 import module1 #i did not try * but i hope it will also work. 
from folder1.module2 import module2 #i did not try * but i hope it will also work. 
+0

これは動作しませんでした – noobycoder

0

相対インポートは、パッケージに関して動作します。 あなたが/path/up/to/parent_folder

python -m parent_folder.folder2.main from /path/up/to 

OR

を実行しているだけで、それは現在のパッケージが

は、親フォルダへのパスを考慮しているものを見つけるカントpython main.pyを実行し、/path/up/to/parent_folderPYTHONPATHまたはsys.pathを設定しました以下にインポートを変更する

from folder2 import * 

と相対輸入のpython main.py

UPDATE

一つを実行には、ケースを使用してパッケージ外部スクリプトからあなたのpackageを消費することです。このスクリプトは通常、エントリポイントまたは実行可能ファイルとして機能します。

import sys 
from package.folder2 import start 

if __name__ == '__main__': 
    sys.exit(start.main()) 

のMyApp /フォルダ2/start.py:

import sys 
from ..folder1.module1 import * 
# this is relative import to "package". 
# Use?: It will avoid confusion and conflicts with other packages in your syspath. Improve readability at some extent, 

def main(): 
    print "do something with folder1.module1 imported objects" 

$ python entry.py

関連する問題