【问题标题】:Import custom package in python google app engine在 python 谷歌应用引擎中导入自定义包
【发布时间】:2011-02-02 18:58:48
【问题描述】:

好的,伙计们,我在任何地方都找不到解决我的问题的方法,我希望解决方法很简单。以前,我的 gae 项目有一个没有文件夹的平面文件系统。我一直在重构一些代码,并试图将一些代码放在一个文件夹中。我有点新,我以前从来没有做过这样的事情,但互联网上没有任何东西表明我不应该轻易地将我的文件移动到一个文件夹中。我将__init__.py 文件添加到文件夹中,并从我的主程序中导入文件夹名称。但是,当我尝试访问其中一个文件中的特定功能时,它会窒息并说AttributeError: 'module' object has no attribute 'site1_ripper'

这是我的文件结构:

main.py
SiteCrawlers\
    __init__.py
    site1_ripper.py

这里是文件的重要部分:

main.py

import SiteCrawlers
class Updater(webapp.RequestHandler):
    def get(self):
        SiteCrawlers.site1_ripper.siteCrawler()

site1_ripper.py

def siteCrawler()
    #stuff here

【问题讨论】:

    标签: python google-app-engine import


    【解决方案1】:

    我认为问题在于您需要显式导入 site1_ripper,除非它在 ​​__init__.py 中指定。使您的主要导入成为:

    import SiteCrawlers.site1_ripper
    

    【讨论】:

    • 感谢这解决了它。您能否扩展“除非在__init__.py 中指定”部分?
    • 如果您的__init__.py 文件有import site1_ripper 行,那么当您整体导入模块时,它将可用。看看标准库中 sqlite3 的 init.py 并尝试在 python 解释器中导入它。比较这两个import sqlite3 as s; dir(s)import sqlite3.dbapi2 as t; dir(t)。它们应该几乎相同。
    【解决方案2】:

    在你的主文件中尝试:

    from SiteCrawlers.site1_ripper import siteCrawler
    
    class Updater(webapp.RequestHandler):
        def get(self):
            siteCrawler()
    

    【讨论】:

    • 也感谢您的意见,但我使用了 chmullig 的解决方案
    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 2011-09-18
    • 2018-07-05
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多