حصلت على هذا الخطأ: "المستورد: لا يمكن استيراد اسم بيثون" كيف يمكنني إصلاحه؟
سؤال
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)
المحلول
تحتاج إلى نشر تتبعك الكامل. ما تظهره هنا ليس مفيدًا. انتهى بي الأمر بحفر السطر 15 من Pyamf/util/فيه.السنة التحضيرية. الرمز الذي يجب أن تنشره هو
from pyamf import python
لا ينبغي أن يفشل هذا إلا إذا كانت بيئتك المحلية قد أفسدت.
هل يمكنك "استيراد pyamf.util" و "استيراد pyamf.python" في قذيفة بيثون التفاعلية؟ ماذا لو بدأت Python أثناء وجودك في /TMP (على افتراض أنه قد يكون لديك ملف يسمى "pyamf.py" في الدليل الحالي. وهو أمر سيء.)
= (التعليق الأقدم أدناه) =
إصلاح سؤالك. لا أستطيع حتى معرفة أين من المفترض أن يكون السطر 15 من util/__ init__.py. بما أنني لا أستطيع معرفة ذلك ، لا يمكنني الإجابة على سؤالك. بدلاً من ذلك ، سأشير إلى طرق لتحسين سؤالك ورمزك.
أولاً ، استخدم لغة الترميز بشكل صحيح ، بحيث تكون جميع الكود في كتلة التعليمات البرمجية. تأكد من عنوان الرمز ، لذلك نحن نعرف أنه من util/__ init__.py وليس بعض الملفات العشوائية.
في رسالة الخطأ الخاصة بك ، قم بتضمين ممتلئ Traceback ، وليس آخر سطرين.
توقف عن استخدام Parens في أشياء مثل "if (not service_func):" واستخدم مساحة بدلاً من ذلك ، لذلك "إذا لم تكن service_func:". تمت مناقشة هذا في بيب 8.
اقرأ وثائق Python وتعلم كيفية استخدام اللغة. شيء مثل "func_name = المسارات [len (المسارات) - 1] يجب أن يكون "func_name = المسارات [-1]
تعرف على يستورد وظيفة ولا تستخدم "exec" لهذه الحالة. ولا تحتاج إلى "exec ississ_string" - فقط قم بـ "self.addservice (service_func ، الهدف)"