【问题标题】:Accessing python parent folder访问python父文件夹
【发布时间】:2013-03-30 21:50:03
【问题描述】:

我查看了以前的答案,这些答案似乎表明我应该能够使用:

from .. import code

虽然它产生了这个: ValueError:尝试相对导入超出顶级包

虽然这似乎不起作用。我的文件结构如下:

scraper/
    __init__.py
    bot/
            scraper.py
            __init__.py
            wigan/ 
                    council.py
                    __init__.py

我可以使用:

from wigan import council

虽然来自委员会,但在尝试加载 scraper.py 时,以下操作均无效:

from .. import scraper
from scraper.bot import scraper
from scraper.bot.scraper import scraper

任何帮助都会很棒。谢谢:-)

【问题讨论】:

  • 你得到什么样的错误?异常、警告还是什么都没有?
  • 当我尝试做 scraper.bot 时出现 ImportError,当我使用时出现 ValueError ..
  • 你应该把scraper文件夹放到'site-packages'或者import sys; print(sys.path)的另一个文件夹中,然后重试import语句

标签: python import directory parent


【解决方案1】:

我怀疑您遇到的问题是您正在运行位于 package.json 中的脚本。这是 Python 中支持最笨拙的特性之一。当您直接运行脚本时,它会将您的当前路径放在 Python 搜索路径的开头。但是,如果您在包裹内,那将是错误的。

要正确运行scrapper.py(如果这是您的脚本),您应该切换到顶级文件夹(scrapper/ 之上的任何内容),然后运行python -m scrapper.bot.scrapper

或者,如果您将该顶级文件夹添加到 Python 搜索路径,或者通过使用 PYTHONPATH 环境变量,或者通过将其(或适当的 .pth 文件)安装到 site-packages 文件夹中,那么当前目录限制将放宽,您可以在任何地方运行脚本。

如果您还打算从其他模块中按名称导入模块,则将模块作为脚本运行还有其他问题。该脚本将导入为__main__,而不是其实际名称。如果您也按名称导入它,您将获得脚本的第二个副本,这可能意味着它无法按预期工作(如果模块中有任何全局状态,则副本之间可能不一致)。这是经常建议脚本做的工作尽可能少的原因之一(只需从另一个模块导入一些东西,然后运行它)。你可能也想重构你的代码来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 2019-10-23
    • 1970-01-01
    • 2014-02-26
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多