title: Failed to start cloud-init at startup after upgrading to Python 3.6
body: <p>I've installed Python 3.6 instead of the default 3.5 release on a new cloud server (Ubuntu 16.04). After I restarted the server, I found that it failed to execute <code>cloud-init</code> at startup with the following errors in the <code>syslog</code>.</p>
  
  <pre><code>Sep 20 16:16:14 cloud-init[1310]: Traceback (most recent call last):
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/bin/cloud-init", line 9, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     load_entry_point('cloud-init==0.7.9', 'console_scripts', 'cloud-init')()
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 570, in load_entry_point
  Sep 20 16:16:14 cloud-init[1310]:     return get_distribution(dist).load_entry_point(group, name)
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 2751, in load_entry_point
  Sep 20 16:16:14 cloud-init[1310]:     return ep.load()
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 2405, in load
  Sep 20 16:16:14 cloud-init[1310]:     return self.resolve()
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 2411, in resolve
  Sep 20 16:16:14 cloud-init[1310]:     module = __import__(self.module_name, fromlist=['__name__'], level=0)
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 27, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     from cloudinit import stages
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 21, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     from cloudinit.handlers import cloud_config as cc_part
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/cloudinit/handlers/cloud_config.py", line 11, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     import jsonpatch
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/jsonpatch.py", line 114, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     json.load = get_loadjson()
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/jsonpatch.py", line 108, in get_loadjson
  Sep 20 16:16:14 cloud-init[1310]:     argspec = inspect.getargspec(json.load)
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3.6/inspect.py", line 1072, in getargspec
  Sep 20 16:16:14 cloud-init[1310]:     raise ValueError("Function has keyword-only parameters or annotations"
  Sep 20 16:16:14 cloud-init[1310]: ValueError: Function has keyword-only parameters or annotations, use getfullargspec() API which can support them
  Sep 20 16:16:14 cloud-init[1310]: Error in sys.excepthook:
  Sep 20 16:16:14 cloud-init[1310]: Traceback (most recent call last):
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
  Sep 20 16:16:14 cloud-init[1310]:     from apport.fileutils import likely_packaged, get_recent_crashes
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     from apport.report import Report
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     import apport.fileutils
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     from apport.packaging_impl import impl as packaging
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     import apt
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     import apt_pkg
  Sep 20 16:16:14 cloud-init[1310]: ModuleNotFoundError: No module named 'apt_pkg'
  Sep 20 16:16:14 cloud-init[1310]: Original exception was:
  Sep 20 16:16:14 cloud-init[1310]: Traceback (most recent call last):
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/bin/cloud-init", line 9, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     load_entry_point('cloud-init==0.7.9', 'console_scripts', 'cloud-init')()
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 570, in load_entry_point
  Sep 20 16:16:14 cloud-init[1310]:     return get_distribution(dist).load_entry_point(group, name)
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 2751, in load_entry_point
  Sep 20 16:16:14 cloud-init[1310]:     return ep.load()
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 2405, in load
  Sep 20 16:16:14 cloud-init[1310]:     return self.resolve()
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 2411, in resolve
  Sep 20 16:16:14 cloud-init[1310]:     module = __import__(self.module_name, fromlist=['__name__'], level=0)
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 27, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     from cloudinit import stages
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 21, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     from cloudinit.handlers import cloud_config as cc_part
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/cloudinit/handlers/cloud_config.py", line 11, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     import jsonpatch
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/jsonpatch.py", line 114, in &lt;module&gt;
  Sep 20 16:16:14 cloud-init[1310]:     json.load = get_loadjson()
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3/dist-packages/jsonpatch.py", line 108, in get_loadjson
  Sep 20 16:16:14 cloud-init[1310]:     argspec = inspect.getargspec(json.load)
  Sep 20 16:16:14 cloud-init[1310]:   File "/usr/lib/python3.6/inspect.py", line 1072, in getargspec
  Sep 20 16:16:14 cloud-init[1310]:     raise ValueError("Function has keyword-only parameters or annotations"
  Sep 20 16:16:14 cloud-init[1310]: ValueError: Function has keyword-only parameters or annotations, use getfullargspec() API which can support them
  Sep 20 16:16:14 systemd[1]: Started MySQL Community Server.
  Sep 20 16:16:14 systemd[1]: cloud-config.service: Main process exited, code=exited, status=1/FAILURE
  Sep 20 16:16:14 systemd[1]: Failed to start Apply the settings specified in cloud-config.
  Sep 20 16:16:14 systemd[1]: cloud-config.service: Unit entered failed state.
  Sep 20 16:16:14 systemd[1]: cloud-config.service: Failed with result 'exit-code'.
  </code></pre>
  
  <p>There were apparently two problems:</p>
  
  <pre><code>ModuleNotFoundError: No module named 'apt_pkg'
  
  ValueError: Function has keyword-only parameters or annotations, use getfullargspec() API which can support them
  </code></pre>
  
  <p>So I ran <code>apt-get install python3-apt</code>, but the package was already installed. Then I ran <code>apt-get install python3-jsonpatch</code>, and it's done successfully. Unfortunately, the problem is not fixed.</p>