【问题标题】:How to search the correct directory for imports如何在正确的目录中搜索导入
【发布时间】:2011-04-19 10:16:29
【问题描述】:

我正在尝试测试一些代码。主脚本需要从多个子目录导入。脚本的结构是这样的(我编辑它以明确 dir1 和 2 是 build 的子目录):

build
   ascript.py
  dir1
    script2.py
  dir2
    script3.py
    subdir1
      script4.py
      script5.py
    subdir2
       script6.py
.        
.
.

注意:不是完整的表示。

我被告知通过命令 shell 测试 SCRIPT2,切换到构建目录,然后输入:

SET PYTHONPATH="." python dir1/script2.py

那个脚本有一个import语句:

from dir2.script3 import *

Script3 从一个或多个 dir 或 subdir 文件夹中的脚本调用导入

所以当运行命令 SET 。 . . (见上文)我没有输出。认为这是我的问题而不是代码问题我将 dir2 复制到

C:\PROGRAM FILES\python264

在 CMD 提示符下运行相同的指令,我得到了一些部分输出

这告诉我 SET PYTHONPATH 在 Windows XP 中没有按预期工作。

我希望这个问题有意义。

响应 SLOTT 的请求 - 但是,在阅读了他的问题后,我了解到一个问题是我不明白我实际上是在提交两个命令

注意在名为html的目录中有一个名为node的脚本,它是parsers2的子目录,它是core的子目录,与exp处于同一级别

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\burchkealey.UNO_CBA>cd c:\

C:\>cd c:\texttool1\build

C:\texttool1\build>set pythonpath="."

C:\texttool1\build>python exp/extract_section.py c:\testextract\c40545.htm
Traceback (most recent call last):
  File "exp/extract_section.py", line 4, in <module>
    from  core.parsers2.html.node import *
 ImportError: No module named core.parsers2.html.node

C:\texttool1\build>

【问题讨论】:

  • SET PYTHONPATH="."python dir1/script2.py 是两个命令。你说是一个。您准确地输入了什么?您看到了什么准确地?请复制并粘贴整个 Windows 终端会话。
  • 我不太确定这个问题,但这里有一个文档链接:docs.python.org/tutorial/modules.html#the-module-search-path

标签: python windows-xp environment-variables path


【解决方案1】:

set PYTHONPATH=C:\texttool1\builddir1\script2.py 命令应该可以正常工作。确保你

  • 在同一控制台(或在一个批处理脚本中)将它们作为两个命令键入
  • 使用包含模块的文件夹的绝对路径

此外,可执行脚本通常以必须从可执行文件所在目录执行的方式编写。尝试在其目录而不是父文件夹中启动“extract_section.py”。

顺便说一句,将顶级包命名为“核心”是不寻常的,但代码会从该包 (from core.parsers2.html.node import *) 进行全局导入。还是“核心”包含在另一个包中?也许这应该是本地导入 (from .core.parsers2.html.node import *)?

【讨论】:

  • 非常感谢 我花了一个小时才明白问题在于我没有按预期获得路径。
  • @PyNEwbie:那么到底是什么问题呢?错误的工作目录?
  • 我认为 python 解释器只在 PYTHON264 中查找要导入的模块。与我一起在 Linux 上编写程序的开发人员在将代码发送给我并崩溃之前,一切都为他工作。我猜他必须设置他的 Python 安装才能正确搜索适当的路径。
【解决方案2】:

我也没有在 XP 上使用 PYTHONPATH 的运气。您可能需要为您的包含提供相对路径,或者您可以将目录添加到系统路径:

sys.path.append('biglongdirectory')

强烈建议不要这样做,不过……取而代之的是this option

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 2016-05-26
    • 1970-01-01
    • 2020-11-29
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多