第一次发帖,所以如果我遗漏了一些细节,请原谅我。
有没有办法使用来自另一个子文件夹的相对路径而无需通过 os 修改 sys.path?最终这将从 cgi 网络服务器运行,所以我宁愿远离 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")
在函数文件夹中,我有两个文件,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: Attempted relative非包导入
我在 mysub.py 中尝试了不同的组合,例如 from ..functions.myfunctions import * 但没有一个产生预期的结果。
我已经阅读了一些相关文章:
using __init__.py
How to import classes defined in __init__.py
http://docs.python.org/2/tutorial/modules.html#packages-in-multiple-directories
但就是想不通。哦,一旦我开始工作,我想尽可能删除 import *'s,但是,我宁愿不必每次调用 hello 函数时都将完整路径放入,所以任何建议都在那里或清理 init.py (使用all或以其他方式)将是一个奖励。
感谢 Blckknght 编辑,我还发现了以下内容: 第 10 亿次相对进口
哪一个,如果我要求的是不可能的,也许我问错了。如果这只是完全不好的做法,是使用 sys.path 实现我的目标的正确方法还是有人可以推荐其他东西(比如不从 ../folders 调用函数)?