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

.
├── 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

My start.py script looks like the following.

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导入汽车
ImportError:没有名为“ 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 - Python 3中的导入错误,但可用于Python 2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41072051/

10-12 22:10
查看更多