从Python 2.5开始,当前工作目录不再从调用进程继承?
我在Windows 2003服务器上把Python的版本从2.4更新到了2.5。
在2.4版本中,我可以这样从一个子目录c:\application\subdir\导入一个文件“sub1.py”:
import sub1
前提是调用的脚本main.py是在c:\application目录下这样启动的:
c:\application\subdir>python ..\main.py
但是在2.5版本中,这种方法不再有效:
C:\application\subdir>python ..\main.py
Traceback (most recent call last):
File "main.py", line 3, in <module>
import sub1
ImportError: No module named sub1
现在我可以在subdir里放一个空文件
__init__.py
然后这样导入:
import subdir.sub1 as sub1
难道在Python 2.5中有变化吗?这意味着在Python 2.4中,当前工作目录是从调用进程继承的,而在Python 2.5中,它被设置为主脚本所在的位置。
[edit3] 我现在已经纠正了问题。我必须为最开始过于简化示例而道歉,并且在没有检查我的简化示例的情况下删除了导致错误的原因。 [/edit3]
5 个回答
2
你可以查看Python是在哪里寻找模块的。所有的查找位置都保存在一个叫做sys.path的变量里。
你可以写一个简单的脚本(或者直接在交互模式下执行),来显示这些位置:
import sys
for x in sys.path:
print x
默认情况下,Python会先在它被执行的目录和原始脚本所在的目录中查找模块。
另外,你可以尝试设置PYTHONPATH这个环境变量,把“.\”这个目录也加进去。
4
要导入sub.py文件,你需要:
import sub # not sub1
1
你需要做以下几个改动:
- 把
subdir
变成一个包,方法是往这个文件夹里添加一个空的__init__.py
文件。 - 把导入的方式改成:
from subdir import sub1