首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问python父文件夹

访问python父文件夹
EN

Stack Overflow用户
提问于 2013-04-09 01:39:56
回答 1查看 183关注 0票数 2

我已经看过以前的答案,它们似乎建议我应该能够使用:

代码语言:javascript
复制
from .. import code

尽管它会产生这样的结果: ValueError:尝试在顶层包之外进行相对导入

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

代码语言:javascript
复制
scraper/
    __init__.py
    bot/
            scraper.py
            __init__.py
            wigan/ 
                    council.py
                    __init__.py

我可以从scraper委员会使用:

代码语言:javascript
复制
from wigan import council

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

代码语言:javascript
复制
from .. import scraper
from scraper.bot import scraper
from scraper.bot.scraper import scraper

任何帮助都是最好的。谢谢:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-09 03:48:37

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15885450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档