Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error importing built-in module "_subprocess" using Google Cloud Platform's Local Development Server

Does anyone know how I can fix the following error? Error Message: "Import Error

C:\Users\MicroSilicon\Desktop\hello_world>python2 "C:\Users\MicroSilicon\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\dev_appserver.py" app.yaml
INFO     2019-12-16 09:23:23,341 devappserver2.py:285] Skipping SDK update check.
INFO     2019-12-16 09:23:23,506 api_server.py:282] Starting API server at: http://localhost:60054
INFO     2019-12-16 09:23:23,509 dispatcher.py:263] Starting module "default" running at: http://localhost:8080
INFO     2019-12-16 09:23:23,512 admin_server.py:150] Starting admin server at: http://localhost:8000
INFO     2019-12-16 09:23:25,522 instance.py:294] Instance PID: 7284
INFO     2019-12-16 09:23:37,250 module.py:434] [default] Detected file changes:
  main.pyc
WARNING  2019-12-16 15:23:37,354 sandbox.py:1104] The module msvcrt is whitelisted for local dev only. If your application relies on msvcrt, it is likely that it will not function properly in production.
ERROR    2019-12-16 15:23:37,355 wsgi.py:269]
Traceback (most recent call last):
  File "C:\Users\MicroSilicon\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "C:\Users\MicroSilicon\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 311, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "C:\Users\MicroSilicon\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "C:\Users\MicroSilicon\Desktop\hello_world\main.py", line 16, in <module>
    import subprocess
  File "C:\Users\MicroSilicon\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\python\runtime\sandbox.py", line 1043, in load_module
    return self.import_stub_module(fullname)
  File "C:\Users\MicroSilicon\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\python\runtime\sandbox.py", line 1049, in import_stub_module
    __import__(fullname, {}, {})
  File "C:\Users\MicroSilicon\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\dist27\subprocess.py", line 8, in <module>
    from python_std_lib import subprocess
  File "C:\Users\MicroSilicon\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\dist27\python_std_lib\subprocess.py", line 417, in <module>
    import _subprocess
  File "C:\Users\MicroSilicon\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\python\runtime\sandbox.py", line 1113, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named _subprocess

I have installed the Google Cloud SDK for Windows and checked the box to get the bundled python installation (version 2.7.13) with it. Python Installation Check

Basically followed the instructions in the link below to get the Hello World application working in a local environment (up to step "Make a change"). https://cloud.google.com/appengine/docs/standard/python/quickstart

Now, the problem occurred when I added the statement import subprocess to the main.py file.

Note the exact problem is with line import _subprocess in module "subprocess.py". This is strange to me because if I try to run any basic python script (not using dev_appserver.py app.yaml to deploy the Google Cloud Environment) or if I just use the python interpreter directly from the console (Windows Command Prompt) I get no errors when trying toimport subprocess nor if I try to import _subprocess directly. Import Statement from Console Python.

Here is the Hello World code (with added subprocess import):

# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import webapp2
import subprocess

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Hello, World!')



app = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)

Finally, my acquaintance had installed the same software earlier and gets no such error when running any application that uses this import statement.

Note: I am working on a Windows 10 machine.

like image 452
DanMicroS Avatar asked Dec 12 '19 19:12

DanMicroS


2 Answers

[Update]

I was not able to resolve this issue in my installed version of Google Cloud SDK.

However, installing an older version (specifically version 220.0.0 with bundled python) resolved the import subprocess error. For my purposes this is acceptable.

Here are the details of my working installation:

C:\Users\MicroSilicon>gcloud version
Google Cloud SDK 220.0.0
app-engine-python 1.9.77
app-engine-python-extras 1.9.74
bq 2.0.34
cloud-datastore-emulator 2.0.2
core 2018.10.08
gsutil 4.34
like image 114
DanMicroS Avatar answered Nov 19 '22 01:11

DanMicroS


I ran into this as well and found out GAE was using a modified version of subprocess residing in the dist27 folder. Looking at the file subprocess.py I found out it listens to a environment variable GAE_USE_SUBPROCESS.

GAE Version (gcloud version

>gcloud version
Google Cloud SDK 308.0.0
app-engine-python 1.9.91
app-engine-python-extras 1.9.90
beta 2020.08.28
bq 2.0.60
cloud-datastore-emulator 2.1.0
core 2020.08.28
gsutil 4.53
kubectl 1.15.11

Solution

Disable the usage of subprocess by adding the following to your app.yaml file:

env_variables:
  GAE_USE_SUBPROCESS: 0

This worked for me at least (running in win64/windows 10)

like image 36
Frank van den Hoek Avatar answered Nov 18 '22 23:11

Frank van den Hoek