2016-12-10 8 views
1

Python v3.5.2で作業したいが、私のラップトップにはPython 2.7.10がインストールされている(MacBook)。私は次のような単純なPythonプロジェクト構造を持っています。 IntelliJをIDEとして使用しているため、アーチファクトが表示されることがあります(例:* .pycファイルと* .imlファイル)。Python 3でインポートエラーが発生するが、Python 2で動作する

 
. 
├── io 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   ├── __pycache__ 
│   │   └── __init__.cpython-35.pyc 
│   └── me 
│    ├── __init__.py 
│    ├── __init__.pyc 
│    └── model 
│     ├── __init__.py 
│     ├── __init__.pyc 
│     ├── car.py 
│     └── car.pyc 
├── start.py 
└── test-python.iml 

私のstart.pyスクリプトは次のようになります。

from io.me.model.car import Car 

car = Car("honda", "civic", 2005) 
print(car.model) 

端末では、​​と入力すると、次のエラーが表示されます。

 
Traceback (most recent call last): 
    File "start.py", line 1, in 
    from io.me.model.car import Car 
ImportError: No module named 'io.me'; 'io' is not a package 

はしかし、私はpython start.pyを入力することを決めたと私は実際に出力得るか:civicを。

私がここで間違っていることに関するアイデアはありますか?

また、Pythonのプロジェクト構造に関するガイドラインはありますか? Javaの世界から来て、Pythonプロジェクトの構造(たとえば、典型的なJava Mavenプロジェクトのような)に推奨されるベストプラクティスまたは非常に意見の多いアプローチがあるかどうかを知りたいと思います。

  • ソースはどこに配置しますか?
  • テストはどこに入れますか?
  • Python用のディレクトリ構造を容易にし、ガイドするビルドツール(Maven for Javaなど)はありますか?
+0

名前を 'io'に変更します。組み込みの 'io'パッケージと衝突するかもしれません。 – MYGz

+0

@MohammadYusufGhaziあなたの提案はうまくいきます。だから、私が述べたように、私はJavaの世界から来ています。私の質問は、既に 'io'を使っているパッケージがあるから、誰もその名前空間で始まるパッケージを作ることができないのですか?例えば'io.mydomain.project'? Javaでは、 'io'名前空間を共有することはできますが、それよりも具体的にしたいのですが、' io'を使っても問題ありません。 –

+0

このようにインポートしてみてください。 '.io.me.model.car import car'から。それが動作するかどうかを確認します。現在のディレクトリから 'io'パッケージをインポートします。 – MYGz

答えて

2

pythonにioという名前のinbuildモジュールがあります。また、フォルダioが存在するディレクトリに__init__.pyを追加します。 python3

Python 3.4.5 (default, Oct 10 2016, 14:41:48) 
[GCC 5.4.0] on cygwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import io 
>>> 
>>> dir(io) 
['BlockingIOError', 'BufferedIOBase', 'BufferedRWPair', 'BufferedRandom', 'BufferedReader', 'BufferedWriter', 'BytesIO', 'DEFAULT_BUFFER_SIZE', 'FileIO', 'IOBase', 'IncrementalNewlineDecoder', 'OpenWrapper', 'RawIOBase', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'StringIO', 'TextIOBase', 'TextIOWrapper', 'UnsupportedOperation', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_io', 'abc', 'open'] 
>>> 

で出力

>>> 
>>> import io 
>>> 
>>> 
>>> dir(io) 
['BlockingIOError', 'BufferedIOBase', 'BufferedRWPair', 'BufferedRandom', 'BufferedReader', 'BufferedWriter', 'BytesIO', 'DEFAULT_BUFFER_SIZE', 'FileIO', 'IOBase', 'IncrementalNewlineDecoder', 'OpenWrapper', 'RawIOBase', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'StringIO', 'TextIOBase', 'TextIOWrapper', 'UnsupportedOperation', '__all__', '__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_io', 'abc', 'open'] 
>>> 

Python2

出力は、何か他のものにあなたのioパッケージの名前を変更します。

+0

サブディレクトリ 'io'に' __init __。py'ファイルが既にあります(次の出力を参照してください)。 'tree'コマンド)。しかし、この '__init __。py'ファイルは空です。それは問題なのだろうか? –

+0

'__init __。py'は単なるパッケージとして作る方法です。空であれば問題ありません。 – kvivek

+0

だから、その 'io'名前空間を使うことはできないようですね。そのディレクトリの名前を単にioという名前に変更しただけなので、 'ioioio'を実行し、' start.py'に対してPython 3コマンドを実行すると動作します。 –

関連する問題