from modulefather import moduleson
python导入模块的两种操作:
1.在~/.bashrc中将路径添加到环境变量PYTHONPATH,则在任何路径可以import该路径下的模块:
export PYTHONPATH="yourpath"
2. 默认在路径sys.path中寻找名为modulefather的模块,导入modulefather模块中的moduleson。
sys.path路径包含:
- 当前的工作路径;
- 环境变量PYTHONPATH指定的路径;
- pip下载的标准(第三方)包site-paceages的路径;
- 开发者指定的路径sys.path.append();
模块可以是包含.py的文件夹,也可以是.py文件:
若modulefather模块是一个.py文件,则moduleson是.py里的对象;若modulefather是一个包含.py文件的文件夹,moduleson可以是.py文件,或者另一个包含.py的文件夹。
在Python2中,把一个文件夹认定为一个模块需要在文件夹中包含__init__.py的文件,否则无法读入;而Ptyhon3无需__init__.py ,反而是如果在sys.path中一旦遇到包含__init__.py的文件夹,就把这个文件夹当成唯一的模块,不再去寻找sys.path中的其他路径中的模块,导致开发者指定的模块往往无法正常导入。
解决方法:对于Python2的代码,可以创建虚拟环境envs,在虚拟环境中使用Python2运行,具体操作可以查看https://blog.csdn.net/Cxiazaiyu/article/details/81209228
Reference:
1. Traps for the Unwary in Python’s Import System — Nick Coghlan's Python Notes 1.0 documentation
2. How does python find packages? // Lee On Coding // My blog about coding and stuff.