从子包导入python包
在此目录树中:从子包导入python包,python,python-2.7,Python,Python 2.7,在此目录树中: mod | __init__.py |-mod1 |-__init__.py |-ceva.py |-mod2 |- __init__.py |-altceva.py 所有\uuuu init\uuuu.py文件均为空 PYTHONPATH=$PYTHONPATH:PATH\u TO\u PARENT/mod ceva.py文件包含我需要导入的函数 如何在altceva.py文件中导入函数(从ceva.py) 在altceva.py中从mod
mod
| __init__.py
|-mod1
|-__init__.py
|-ceva.py
|-mod2
|- __init__.py
|-altceva.py
- 所有\uuuu init\uuuu.py文件均为空
- PYTHONPATH=$PYTHONPATH:PATH\u TO\u PARENT/mod
- ceva.py文件包含我需要导入的函数
在altceva.py中从mod.mod1.ceva导入foo似乎可行,但前提是我从mod目录运行
python mod2/altceva.py
,而不是从mod/mod2运行。如何使导入从mod和mod/mod2路径都可用?您必须使您的mod
目录可供Python解释器使用。如果您在MacOSX上,只需执行以下操作:
cd path_to_main_mod_directory
ln -s /Library/Python/2.7/site-packages/mod mod
然后它就会起作用:
python mod/mod2/altceva.py
cd mod && python mod2/altceva.py
您需要向python解释器使用的路径添加mod。 正如您所知,您自己的小文件结构可以通过脚本本身来完成 altceva.py
import sys
import os
#Absolute path of mod2 directory
#__file__ is the location of this script
mod2_dir = os.path.dirname(os.path.realname(__file__))
#Absolute path of mod directory
mod_dir = os.path.dirname(mod2_dir)
#Add mod to PATH
sys.path.append(mod_dir)
from mod1.ceva import foo
这样,您就可以从mod目录导入任何内容,也不需要放入mod。在导入开始时