2

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

from .. import code

虽然它产生了这个: ValueError: Attempted relative import beyond toplevel package

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

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

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

4

1 回答 1

0

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

要正确运行scrapper.py(如果那是您的脚本),您应该更改到顶级文件夹(无论是上面的什么scrapper/),然后运行python -m scrapper.bot.scrapper​​.

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

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

于 2013-04-08T19:48:37.030 回答