Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从子包导入python包_Python_Python 2.7 - Fatal编程技术网

从子包导入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文件中导入函数(从ceva.py


altceva.py中从mod.mod1.ceva导入foo似乎可行,但前提是我从mod目录运行
python mod2/altceva.py
,而不是从mod/mod2运行。如何使导入从modmod/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。在导入开始时