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 文件)。
.
├── 我
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── __pycache__
│ │ └── __init__.cpython-35.pyc
│ └──我
│ ├── __init__.py
│ ├── __init__.pyc
│ └── 模型
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── car.py
│ └── car.pyc
├── start.py
└── 测试-python.iml
我的 start.py
脚本如下所示。
from io.me.model.car import Car
car = Car("honda", "civic", 2005)
print(car.model)
在终端中,如果我输入 python3 start.py
,则会出现以下错误。
追溯(最近一次通话):
文件 "start.py",第 1 行,位于
来自 io.me.model.car 进口汽车
导入错误:没有名为 'io.me' 的模块; 'io' 不是包
但是,我决定输入 python start.py
,实际上我得到了一个输出:civic
.
关于我在这里做错了什么有什么想法吗?
此外,是否有关于 Python 的项目结构指南?来自 Java 世界,我想知道是否有针对 Python 项目结构的推荐最佳实践或高度自以为是的方法(例如,像典型的 Java Maven项目)。
- 我应该把资源放在哪里?
- 我应该把测试放在什么地方?
- 是否有 Python 的构建工具(如 Java 的 Maven)可以促进和指导目录结构?
python 中有一个名为 io 的内置模块。还要在文件夹io所在的目录中添加__init__.py
。
在Python2
中输出
>>>
>>> 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中输出
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
包重命名为其他名称。
我想使用 Python v3.5.2,但我的笔记本电脑也安装了 Python 2.7.10(它是 MacBook)。我有一个简单的 Python 项目结构,如下所示。请注意,可能会显示工件,因为我使用 IntelliJ 作为 IDE(例如 *.pyc 文件和 *.iml 文件)。
. ├── 我 │ ├── __init__.py │ ├── __init__.pyc │ ├── __pycache__ │ │ └── __init__.cpython-35.pyc │ └──我 │ ├── __init__.py │ ├── __init__.pyc │ └── 模型 │ ├── __init__.py │ ├── __init__.pyc │ ├── car.py │ └── car.pyc ├── start.py └── 测试-python.iml
我的 start.py
脚本如下所示。
from io.me.model.car import Car
car = Car("honda", "civic", 2005)
print(car.model)
在终端中,如果我输入 python3 start.py
,则会出现以下错误。
追溯(最近一次通话): 文件 "start.py",第 1 行,位于 来自 io.me.model.car 进口汽车 导入错误:没有名为 'io.me' 的模块; 'io' 不是包
但是,我决定输入 python start.py
,实际上我得到了一个输出:civic
.
关于我在这里做错了什么有什么想法吗?
此外,是否有关于 Python 的项目结构指南?来自 Java 世界,我想知道是否有针对 Python 项目结构的推荐最佳实践或高度自以为是的方法(例如,像典型的 Java Maven项目)。
- 我应该把资源放在哪里?
- 我应该把测试放在什么地方?
- 是否有 Python 的构建工具(如 Java 的 Maven)可以促进和指导目录结构?
python 中有一个名为 io 的内置模块。还要在文件夹io所在的目录中添加__init__.py
。
在Python2
中输出>>>
>>> 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中输出
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
包重命名为其他名称。