2012-02-20 23 views
9
cấu trúc

thư mục My trong công cụ ứng dụng là như thế này:Không mô-đun tên markdown App Engine

project 
    app.yaml 
    main.py 
    lib 
     markdown 
     markdown_files 

Markdown đang được nhập khẩu main.py bởi from lib.markdown import markdown. Tại thời điểm này máy chủ dev đang bắt đầu cung cấp cho tôi theo dõi ngăn xếp sau đây. Tôi tự hỏi điều gì đang xảy ra ở đây! Tôi có một số init .py in lib.

Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2769, in _HandleRequest 
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2654, in _Dispatch 
    base_env_dict=env_dict) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 683, in Dispatch 
    base_env_dict=base_env_dict) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1718, in Dispatch 
    self._module_dict) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1622, in ExecuteCGI 
    reset_modules = exec_script(config, handler_path, cgi_path, hook) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1310, in ExecuteOrImportScript 
    exec module_code in script_module.__dict__ 
    File "/Users/nomadali/jeeqs/git/src/jeeqs.py", line 26, in <module> 
    from lib.markdown import markdown 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate 
    return func(self, *args, **kwargs) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1845, in load_module 
    return self.FindAndLoadModule(submodule, fullname, search_path) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate 
    return func(self, *args, **kwargs) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1717, in FindAndLoadModule 
    description) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate 
    return func(self, *args, **kwargs) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1660, in LoadModuleRestricted 
    description) 
    File "/Users/nomadali/jeeqs/git/src/lib/markdown/__init__.py", line 161, in <module> 
    import preprocessors 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate 
    return func(self, *args, **kwargs) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1845, in load_module 
    return self.FindAndLoadModule(submodule, fullname, search_path) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate 
    return func(self, *args, **kwargs) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1717, in FindAndLoadModule 
    description) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate 
    return func(self, *args, **kwargs) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1660, in LoadModuleRestricted 
    description) 
    File "/Users/nomadali/jeeqs/git/src/markdown/preprocessors.py", line 11, in <module> 
ImportError: No module named markdown 
INFO  2012-02-20 19:53:02,506 dev_appserver.py:2884] "GET /favicon.ico HTTP/1.0" 500 - 

Update1

Tôi tin rằng câu hỏi này là một dupe của Import Python module with PyImport_ImportModuleEx for a gedit plugin

Câu trả lời:

Nếu bạn muốn sử dụng markdown mà không sửa đổi nó sau đó bạn sẽ phải đặt nó ở đâu đó nơi thư viện Python mong đợi nó, chẳng hạn như trong gói site /. Nếu không, bạn sẽ phải sửa đổi nó để sử dụng nhập khẩu tương đối thay vì nhập khẩu tuyệt đối.

Cập nhật 2 tôi giải quyết vấn đề này bằng cách sửa đổi sys.path của tôi trong công cụ ứng dụng:

sys.path.append (os.path.join (os.path.dirname (tập tin), 'lib'))

Nhờ Murat để được giúp đỡ,

+0

Trừ khi bạn có nhiều mô-đun của bên thứ ba, sẽ đơn giản hơn là chỉ cần xóa thư mục lib và đặt thư mục đánh dấu vào thư mục gốc của dự án của bạn. Sau đó, bạn không cần phải chỉnh sửa đường dẫn của bạn cả. –

+0

Tôi thực sự có rất nhiều thư viện. – Ali

+0

Bạn nên thêm câu trả lời làm câu trả lời cho câu hỏi của mình và đánh dấu câu trả lời là câu trả lời đúng. Cám ơn. – amirouche

Trả lời

0

Tôi tin rằng câu hỏi này là một dupe của module nhập Python với PyImport_ImportModuleEx cho một plugin gedit

Câu trả lời:

Nếu bạn muốn sử dụng markdown mà không sửa đổi nó sau đó bạn sẽ phải đặt nó ở đâu đó nơi thư viện Python mong đợi nó, chẳng hạn như trong gói site /. Nếu không, bạn sẽ phải sửa đổi nó để sử dụng nhập khẩu tương đối thay vì nhập khẩu tuyệt đối.

Cập nhật 2 tôi giải quyết vấn đề này bằng cách sửa đổi sys.path của tôi trong công cụ ứng dụng:

sys.path.append (os.path.join (os.path.dirname (tập tin), 'lib'))

Nhờ Murat để được giúp đỡ,

-1

gì bạn muốn là cho lib là ở PYTHONPATH của bạn, các đường dẫn nơi Python trông thứ mà bạn cố gắng nhập. Như bạn đã khám phá, một cách để làm điều đó là thêm lib vào sys.path.

Tạo một init .pile không phải là những gì bạn muốn, vì điều đó làm cho lib gói chứa markdown. Tại thời điểm đó, bạn sẽ có thể làm

from lib import markdown 

mặc dù đó không phải là cách được khuyến nghị để thực hiện.

0

Các tập tin cần phải được gọi __init__.py cho rằng để làm việc.

Việc thêm thư mục lib vào pythonpath cũng hoạt động.

Nếu bạn muốn sử dụng markdown mà không sửa đổi sau đó bạn sẽ phải đặt nó ở đâu đó nơi thư viện Python hy vọng nó, chẳng hạn như trong trang web gói/

này là không chính xác, công cụ ứng dụng có cơ chế nhập riêng và chỉ các gói có màu trắng rõ ràng được liệt kê mới được phép nhập thông qua phương thức này.