2013-04-08 73 views
2

我已经通过以前的答案,这似乎暗示我应该能够使用看起来相对尝试超越进口顶级包访问蟒蛇父文件夹

虽然这似乎没有工作。我的文件结构如下:

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 

任何帮助将是伟大的。谢谢:-)

+0

你得到了什么样的错误?例外,警告或什么都没有? – J0HN 2013-04-08 17:44:32

+0

ImportError当我尝试执行scraper.bot,ValueError时,我使用.. – Patrick 2013-04-08 17:47:26

+0

你应该把scraper文件夹放到'site-packages'或import sys中的另一个文件夹中; print(sys.path)'并重试导入语句 – User 2013-04-08 18:16:52

回答

0

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

要正常运行scrapper.py(如果那是你的脚本),你应该改变,以最高级别文件夹(无论是上述scrapper/),然后运行python -m scrapper.bot.scrapper

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

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