直接从Python 3模块导入函数

时间:2015-12-17 18:09:28

标签: python python-3.x python-import

我有一个Python 3项目的以下文件夹结构,其中vehicle.py是主脚本,文件夹stats被视为包含多个模块的包:

enter image description here

cars模块定义了以下功能:

def neon():
    print('Neon')
    print('mpg = 32')


def mustang():
    print('Mustang')
    print('mpg = 27')

使用Python 3,我可以从vehicle.py内访问每个模块中的函数,如下所示:

import stats.cars as c

c.mustang()

但是,我想直接访问每个模块中定义的函数,但在执行此操作时收到错误:

import stats as st

st.mustang()
# AttributeError: 'module' object has no attribute 'mustang'

我还尝试使用以下代码在__init__.py文件夹中放置stats文件:

from cars import *
from trucks import *

但我仍然收到错误:

import stats as st

st.mustang()
# ImportError: No module named 'cars'

我尝试使用与NumPy相同的方法,例如:

import numpy as np

np.arange(10)
# prints array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

如何在Python 3中创建像NumPy这样的包直接在模块中访问函数?

4 个答案:

答案 0 :(得分:7)

__init__.py文件放在stats文件夹中(正如其他人所说),并将其放入其中:

from .cars import neon, mustang
from .trucks import truck_a, truck_b

不是那么整洁,但更容易使用*通配符:

from .cars import *
from .trucks import *

这样,__init__.py脚本会为您执行一些导入,进入自己的命名空间。

现在,您可以在导入neon后直接使用mustang / stats模块中的函数/类:

import stats as st
st.mustang()

答案 1 :(得分:0)

在您的统计信息文件夹中添加空__init__.py个文件并发生魔术。

答案 2 :(得分:0)

你尝试过类似的东西吗? from cars import stats as c

您可能还需要该目录中的空__init__.py个文件。

host:~ lcerezo$ python
Python 2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from boto.s3.connection import S3Connection as mys3
>>>

答案 3 :(得分:0)

您需要在stats文件夹中创建 __ init __。py 文件。

__ init __。py 文件是使Python将目录视为包含包所必需的。 Documentation