Python 2.7 从子文件夹导入Python相对路径

Python 2.7 从子文件夹导入Python相对路径,python-2.7,Python 2.7,先发到SO,如果我遗漏了一些细节,请原谅 有没有一种方法可以使用另一个子文件夹的相对路径,而不用通过操作系统修改sys.path?最终,这将从cgi Web服务器上运行,因此我宁愿远离python.exe的任何-m参数 我使用的是Python 2.7.3,文件/目录结构如下: | myprog.py | +---functions | myfunctions.py | __init__.py | \---subfolder mysub.py 在根目录

先发到SO,如果我遗漏了一些细节,请原谅

有没有一种方法可以使用另一个子文件夹的相对路径,而不用通过操作系统修改sys.path?最终,这将从cgi Web服务器上运行,因此我宁愿远离python.exe的任何-m参数

我使用的是Python 2.7.3,文件/目录结构如下:

|   myprog.py
|
+---functions
|       myfunctions.py
|       __init__.py
|
\---subfolder
        mysub.py
在根目录中,我有一个名为myprog.py的.py文件:

#file .\myprog.py

from functions import *
hello("Hi from Main")
在functions文件夹中,我有两个文件,init.py,myfunctions.py:

#The File: functions\__init__.py :
from myfunctions import *

#The File: functions\myfunctions.py :
def hello(sometext):
   print sometext
最后,在子文件夹中,我有:

#The File: subfolder\mysub.py :

from ..functions import *
hello("Hi From mysubprogram")
myprog.py执行良好(从父文件夹运行python.exe myprog.py时),打印“Hi from Main”,然而,mysub.py(从子文件夹执行时)一直将错误:ValueError:尝试在非包中进行相对导入

我在mysub.py中尝试了不同的组合,例如从..functions.myfunctions import*开始,但没有一个产生期望的结果

我读过几篇相关文章:


但我就是想不出来。哦,一旦我开始工作,我希望尽可能地删除import*,但是,我不希望每次调用hello函数时都要把它的完整路径放在那里,因此任何关于清理init.py的建议(使用all或其他方式)都是一个额外的好处

感谢Blckknght编辑,我还发现了以下内容:


如果我的要求不可能,也许我问错了。如果这只是一个彻头彻尾的错误做法,那么使用sys.path是实现我目标的正确方法,还是有其他人可以推荐(比如不从../文件夹调用函数)?

我认为问题与如何运行
mysub.py
脚本有关。Python在处理包中的脚本时往往做得不好,因为主脚本模块总是被命名为
\uuuu main\uuu
,而不是它通常的名称


我认为您可以通过使用
python-m subfolder.mysub
运行
mysub
,或者通过操作
mysub.py
中的
\uuuuuu包
变量来修复此问题(如所述)。不幸的是,它不整洁。

我认为问题与如何运行
mysub.py
脚本有关。Python在处理包中的脚本时往往做得不好,因为主脚本模块总是被命名为
\uuuu main\uuu
,而不是它通常的名称

我认为您可以通过使用
python-m subfolder.mysub
运行
mysub
,或者通过操作
mysub.py
中的
\uuuuuu包
变量来修复此问题(如所述)。不幸的是,它不整洁