在Python 3中导入错误但适用于Python 2

Import error in Python 3 but works with Python 2

我想使用python v3.5.2,但我的笔记本电脑也安装了python 2.7.10(它是一个MacBook)。我有一个简单的python项目结构,如下所示。注意,可能会显示一些工件,因为我使用Intellij作为IDE(例如*.pyc文件和*.iml文件)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.
├── 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脚本如下。

1
2
3
4
from io.me.model.car import Car

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

在终端中,如果我输入python3 start.py,则会得到以下错误。

1
2
3
4
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),方便和指导目录结构?
  • 小精灵


    python中有一个名为io的内置模块。同时在文件夹IO所在的目录中添加__init__.py

    输出(单位:python2)

    1
    2
    3
    4
    5
    6
    7
    >>>
    >>> 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']
    >>>

    python3产量

    1
    2
    3
    4
    5
    6
    7
    8
    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']
    >>>

    将您的io包重命名为其他包。