【问题标题】:Why does my python not add current working directory to the path?为什么我的 python 没有将当前工作目录添加到路径中?
【发布时间】:2011-09-18 23:22:50
【问题描述】:

我不断看到网站提到您执行“python”的目录被添加到 python 路径中。例如在http://www.stereoplex.com/blog/understanding-imports-and-pythonpath 上,作者cd 到/tmp 文件夹,然后执行'print(sys.path)',你瞧,/tmp 文件夹出现在路径列表中。这是我在我的系统上尝试这个(安装了 2.6.6):

示例结构:

app/
  mymodule.py
  inner_folder/
    myscript.py

在 myscript.py 中包含以下行:

import mymodule.py

我做了什么:

cd app
python inner_folder/myscript.py # ImportError

由于我是从 app/ 目录执行解释器,不应该将 'app' 添加到 python 路径中吗?这就是我一直在阅读的许多文档中指定的行为方式。

请指教!

(我通过手动将我想要的文件夹添加到环境中暂时解决了这个问题,但不想永远依赖它。由于许多网站说可以做到,我想为自己重现它)

【问题讨论】:

  • 你不是说:import mymodule 而不是import 'mymodule.py'

标签: python python-import


【解决方案1】:

添加的是脚本的目录,而不是当前目录。如果你将inner_folder/ 变成一个包,那么你可以使用python -m inner_folder.myscript 来运行脚本,同时将app/ 添加到sys.path

【讨论】:

  • +1:确实,即使导入已修复,这也是真正的解决方案。
  • 感谢您的澄清。我知道脚本的目录已添加,但我认为“当前目录”也已添加的唯一原因是因为它曾经可以工作。我发誓!一定是发生了什么事情使它停止工作。我不记得以任何方式修改 PYTHONPATH,所以这就是我问这个问题的原因。
  • 在 mac OS 10.7.5 中运行 Python 2.7 时,为我添加了当前目录,并且原始示例代码有效。
  • @CypressFrankenfeld,不确定为什么要添加当前目录,但只是为了进行完整性检查,您可能需要先执行 unset PYTHONPATH
  • @CypressFrankenfeld:在 3.4 之前的 python 版本中,一个空的 PYTHONPATH 导致 '.'被添加到 sys.path。见docs.python.org/3/whatsnew/…
【解决方案2】:

无论当前目录是否在sys.path,导入语句通常如下所示:

import mymodule

你写的代码如下:

import 'mymodule.py'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多