我有一个Python 3项目的以下文件夹结构,其中vehicle.py
是主脚本,该文件夹stats
被视为包含多个模块的包:
该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这样的包来直接访问模块中的函数?
将__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
module中的函数/类stats
:
import stats as st st.mustang()