【问题标题】:Current working directory no longer inherited from calling process from python 2.5 onwards?从 python 2.5 开始,当前工作目录不再继承自调用进程?
【发布时间】:2009-04-20 09:22:13
【问题描述】:

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

进入子目录并像这样导入:

import subdir.sub1 as sub1

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

[编辑3] 我现在纠正了这个问题。我必须道歉,我起初过度简化了示例,并在没有检查我的简化示例的情况下删除了导致错误的原因。 [/edit3]

【问题讨论】:

  • 请保留问题,只是说,您发现了问题以及问题所在... 对“抱歉,我删除了问题”之类的文字投了反对票!
  • 你很聪明,但在我改变它之前就投下了反对票。这就是我删除它以免获得更多反对票的原因(因为 nic 反对票甚至懒得评论她或他为什么这样做。这是自我保护)
  • 是的,但是删除问题仍然不是正确的方法!我知道如果他们对正确的问题投反对票,这是不对的。如果你顺其自然会更容易......每个人都会无缘无故地得到一些反对意见。
  • 我把它回滚到原来的样子——我不太清楚这里发生了什么,但我不明白你为什么要把你的问题变成“感谢投票”的事情——这肯定会吸引更多的反对票。如果你不是很喜欢它,我猜你可以删除它
  • 我不知道删除选项,我会看看。删除也会删除我的反对票吗?请理解,对于无缘无故的匿名投票,必须有一些防御措施。我认为这在 SA 是一件坏事。人们将精力投入到问题和答案中,并且应该始终解释反对意见

标签: python import


【解决方案1】:

要导入 sub.py,您需要:

import sub      # not sub1

【讨论】:

    【解决方案2】:

    您可以检查 python 在哪里搜索模块。位置列表包含在变量 sys.path 中。

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

    import sys
    
    for x in sys.path:
      print x
    

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

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

    【讨论】:

    • 找出我必须再次安装 2.4,然后再次安装 2.5。我希望有人知道从 2.4 到 2.5 的变化
    • 您可以在您的 2.5 安装中进行检查。您应该可以导入它。否则,你可以做一个简单的测试:创建一个文件 a.py,内容为 def foo(): print foo 然后从这个目录交互地运行 python 并输入: import a then a.foo() 你应该得到打印出来。此外,您可以在详细模式下运行 python,您将获得更多信息:python -v backups.py。为了安全起见,请删除已编译的版本 (*.pyc)
    【解决方案3】:

    您需要进行以下更改:

    • 通过在目录中添加一个空的__init__.py 文件将subdir 转换为一个包
    • 将导入改为:from subdir import sub1

    【讨论】:

      【解决方案4】:

      我认为sub1 是错字?在您的问题中,您有时指的是sub,有时指的是sub1。

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 我想我可以从当前工作目录导入,而不用在路径上
        猜你喜欢
        • 1970-01-01
        • 2020-06-05
        • 2020-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-09
        • 2016-10-17
        相关资源
        最近更新 更多