Running GAE GCS on PyCharm under OS X, runtime error “No module named cloudstorage”

前端 未结 4 2164
轮回少年
轮回少年 2021-02-20 13:11

I am trying to add Google Cloud Storage functionality to a Python GAE app that is already running with significant functionality. I work entirely within PyCharm on my developmen

相关标签:
4条回答
  • 2021-02-20 13:41

    I solve the missing module issue by adding the following to my main application file (main.py):

    import os
    import sys
    sys.path.append(os.path.join(os.path.dirname(__file__), "lib"))
    

    I think this is the way Guido intended. Now my code simply says import cloudstorage as gcs. None of the lib.cloudstorage or lib/__init__.py business.

    From https://stackoverflow.com/a/37645984/1740008

    0 讨论(0)
  • 2021-02-20 13:55

    Actually, you also need to

    touch __init__.py

    in the lib directory. This will make the cloudstorage module visible to the "import lib.cloudstorage" command.

    Dear Google: The distributions should include this file (or the procedure should account for it), and the demo script should be changed to reflect the expected usage. But more importantly why are you distributing/PROLIFERATING library code like this??!!! Why is this not distributed via gcloud? How am I ever going to pick up a patch for this library?

    0 讨论(0)
  • 2021-02-20 13:58

    If the "cloudstorage" directory is at <app>/lib/cloudstorage, then the import statement has to specify "lib":

    import lib.cloudstorage
    

    In my case, it's:

    import lib.cloudstorage as gcs
    

    By the way, the <app>/lib/GoogleAppEngineCloudStorageClient-1.9.5.0-py2.7.egg-info directory does not seem to be needed and can be deleted.

    0 讨论(0)
  • 2021-02-20 13:59

    The accepted answer's solution

    import lib.module_name
    

    definitely can solve the problem. But I don't like add lib in front of every single module and happened to see how Google suggest import third party libs like this.

    appengine will automatically run a file called appengine_config.py. So you can create such a file and put

    from google.appengine.ext import vendor
    vendor.add('lib')
    

    inside that file. This will help you tell appengine to find dependencies in that folder, so you can simply write

    import cloudstorage as gcs
    
    0 讨论(0)
提交回复
热议问题