从Python 2.5开始,当前工作目录不再从调用进程继承?

3 投票
5 回答
592 浏览
提问于 2025-04-15 11:10

我在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

撰写回答