访问python父文件夹

时间:2013-04-08 17:39:56

标签: python import directory parent

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

from .. import code

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我怀疑你遇到的问题是你正在运行一个位于包中的脚本。这是Python中最笨拙支持的功能之一。直接运行脚本时,它会将当前路径放在Python搜索路径的开头。如果你在一个包里面,这将是错误的。

要正确运行scrapper.py(如果这是您的脚本),您应该更改为顶级文件夹(无论高于scrapper/),然后运行python -m scrapper.bot.scrapper

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

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