将main.py导入另一个模块(包含在同一目录中)

时间:2017-10-02 22:04:24

标签: python python-2.7 webapp2

如何将main.py中的类导入同一目录中的另一个文件?

文件结构:

Project
    |-- main.py
    |-- first_file.py
    |-- second_file.py

main.py

class ClassX():
    def random1(self):
        ....
        return stuff

    def get(self):
        class_x_stuff = self.random1()
        print class_x_stuff

app = webapp2.WSGIApplication([
    ('/classw', ClassW),
    ('/classx', ClassX)
], debug=True)

first_file.py

import main

checkpoint = main.ClassX()
print checkout

输出:

AttributeError: 'module' object has no attribute 'ClassX'

我使用的资源:

  1. How to import the class within the same directory or sub directory?
  2. AttributeError: 'module' object has no attribute
  3. 我可以将first_file.py导入main.py以及second_file.py。但我无法将main.py导入其他文件。

    重命名main.py文件(例如proj_main.py)会导致错误:

    Traceback (most recent call last):
    File "/usr/local/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
      handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
    File "/usr/local/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
      handler, path, err = LoadObject(self._handler)
    File "/usr/local/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
      obj = __import__(path[0])
    
    ImportError: No module named main
    

    我有什么选择?我该如何解决这个问题?

    修改

    完整追溯:

    INFO     2017-10-02 22:10:21,744 dispatcher.py:226] Starting module "default" running at: http://localhost:7070
    INFO     2017-10-02 22:10:21,747 admin_server.py:116] Starting admin server at: http://localhost:8000
    ERROR    2017-10-02 22:10:24,017 wsgi.py:263] 
    Traceback (most recent call last):
      File "/usr/local/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
      File "/usr/local/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
      File "/usr/local/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
      File "/Users/mycomputer/Documents/project_folder/main.py", line 34, in <module>
    from first_file import ClassY
      File "/Users/mycomputer/Documents/project_folder/first_file.py", line 20, in <module>
        checkpoint = main.ClassX()
    AttributeError: 'module' object has no attribute ‘ClassX’
    INFO     2017-10-02 22:10:24,023 module.py:832] default: "GET / HTTP/1.1" 500 -
    

1 个答案:

答案 0 :(得分:0)

问题是我遇到了circular dependency

File "/Users/mycomputer/Documents/project_folder/main.py", line 34, in <module>
from first_file import ClassY

请注意,main.pyfirst_file导入,然后first_filemain.py导入,导致circular import gotcha < / p>

<强>解决方案:

<强> first_file.py

import second_file

checkpoint = second_file.class_x()
    print checkout

<强> second_file.py

import main

def class_x():
    item = main.ClassX()
    return item