Я получил эту ошибку: «ImportError: не могу импортировать имя Python» Как мне это исправить? - PullRequest
2 голосов
/ 17 сентября 2010
File "G:\Python25\Lib\site-packages\PyAMF-0.6b2-py2.5-win32.egg\pyamf\util\__init__.py", line 15, in <module>
ImportError: cannot import name python

Как мне это исправить? Если вам нужна информация, чтобы узнать, как решить эту проблему, я могу объяснить, просто спросите.

Спасибо

Код:

from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import webapp
from TottysGateway import TottysGateway
import logging

def main():
    services_root = 'services'
    #services = ['users.login']

    #gateway = TottysGateway(services, services_root, logger=logging, debug=True)

    #app = webapp.WSGIApplication([('/', gateway)], debug=True)

    #run_wsgi_app(app)

if __name__ == "__main__":
    main()

Код:

from pyamf.remoting.gateway.google import WebAppGateway
import logging


class TottysGateway(WebAppGateway):
    def __init__(self, services_available, root_path, not_found_service, logger, debug):
        # override the contructor and then call the super
        self.services_available = services_available
        self.root_path = root_path
        self.not_found_service = not_found_service
        WebAppGateway.__init__(self, {}, logger=logging, debug=True)

    def getServiceRequest(self, request, target):
        # override the original getServiceRequest method
        try:
            # try looking for the service in the services list
            return WebAppGateway.getServiceRequest(self, request, target)
        except:
            pass

        try:
            # don't know what it does but is an error for now
            service_func = self.router(target)
        except:
            if(target in self.services_available):
                # only if is an available service import it's module
                # so it doesn't access services that should be hidden
                try:
                    module_path = self.root_path + '.' + target
                    paths = target.rsplit('.')
                    func_name = paths[len(paths) - 1]
                    import_as = '_'.join(paths) + '_' + func_name
                    import_string = "from "+module_path+" import "+func_name+' as service_func'
                    exec import_string
                except:
                    service_func = False

        if(not service_func):
            # if is not found load the default not found service
            module_path = self.rootPath + '.' + self.not_found_service
            import_string = "from "+module_path+" import "+func_name+' as service_func'

        # add the service loaded above
        assign_string = "self.addService(service_func, target)"
        exec assign_string

        return WebAppGateway.getServiceRequest(self, request, target)

1 Ответ

1 голос
/ 18 сентября 2010

Вам необходимо опубликовать полный трекбек.То, что вы показываете здесь, не так уж и полезно.Я закончил тем, что копал строку 15 pyamf / util / init .py.Код, который вы должны были опубликовать:

from pyamf import python

Это не должно завершиться ошибкой, если ваша локальная среда не испорчена.

Можете ли вы импортировать pyamf.util и import pyamf.python винтерактивная оболочка Python?Как насчет того, чтобы запустить Python в / tmp (при условии, что в текущем каталоге у вас может быть файл с именем 'pyamf.py'. Это плохо.)

= (более старый комментарий ниже)=

Исправьте свой вопрос.Я даже не могу сказать, где должна быть строка 15 из util / __ init__.py.Так как я не могу понять это, я не могу ответить на ваш вопрос.Вместо этого я укажу способы улучшить ваш вопрос и код.

Во-первых, правильно используйте язык разметки, чтобы весь код находился в блоке кода.Убедитесь, что вы назвали код, так что мы знаем, что он из util / __ init__.py, а не из какого-то случайного файла.

В вашем сообщении об ошибке укажите full traceback, а непоследние две строки.

Прекратите использовать парены в таких вещах, как «if (не service_func):», и вместо этого используйте пробел, поэтому его «если не service_func:».Это обсуждается в PEP 8 .

Прочитайте документацию по Python и узнайте, как использовать язык.Что-то вроде «func_name = paths [len (paths - 1]») должно быть «func_name = paths [-1]»

Подробнее о функции import ине используйте "exec" для этого случая.Вам также не нужна "exec assign_string" - просто сделайте "self.addService (service_func, target)" *

...