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

时间:2009-04-20 09:22:14

标签: python import

我在Windows 2003服务器上将我的python版本从2.4更新到2.5。

在2.4中,我可以从子目录c:\ application \ subdir \中导入文件“sub1.py”,如下所示:

import sub1

只要生成在c:\ application中的调用脚本main.py像这样启动:

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

现在我可以放一个空文件

__init__.py

进入subdir并像这样导入:

import subdir.sub1 as sub1

python 2.5有变化吗?这意味着python 2.4中的当前工作目录是从调用进程继承的,而在python 2.5中它被设置为主脚本所在的位置。

[EDIT3] 我现在纠正了这个问题。我必须道歉,我最初过度简化了示例并删除了导致错误的原因,而没有检查我的简化示例。 [/ EDIT3]

5 个答案:

答案 0 :(得分:4)

导入sub.py,您需要:

import sub      # not sub1

答案 1 :(得分:2)

您可以查看python搜索模块的位置。位置列表包含在变量sys.path。

您可以创建一个简单的脚本(或以交互方式执行),显示以下内容:

import sys

for x in sys.path:
  print x

默认情况下,python将搜索正在执行它的目录以及原始脚本所在的位置。

另外,尝试将PYTHONPATH环境变量设置为包含“。\”目录。

答案 2 :(得分:1)

我认为sub1是拼写错误?在您的问题中,您有时会引用sub,有时引用sub1

我首先要检查c:\application中是否存在sub.py文件。

  • 检查sub.py文件和应用程序目录的权限。用户可以读取sub.py文件吗? python解释器可以创建* .pyc文件吗?
  • 另外,手动删除sub.pyc文件,以防旧版本的pyc导致问题。

答案 3 :(得分:1)

您需要进行以下更改:

  • 通过将空subdir文件添加到目录
  • ,将__init__.py转换为包
  • 将导入更改为:from subdir import sub1

答案 4 :(得分:0)

将此目录添加到您的python路径