Add .vpython3 to specify nececssary Python packages.

For the same reason https://pdfium-review.googlesource.com/38901 added
.vpython for Python 2, add .vpython3 for Python 3. This will be used
when https://chromium-review.googlesource.com/3381540 switches the build
recipe from python3 to vpython3.

Also fix another Python 3 incompatibility in skia_gold.py to fix the
build bots.

Bug: pdfium:1674
Change-Id: Ifd9c7a31e820bf175fb1a2241d31cc068f89c5e5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/89173
Reviewed-by: Nigi <nigi@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/.vpython3 b/.vpython3
new file mode 100644
index 0000000..108598d
--- /dev/null
+++ b/.vpython3
@@ -0,0 +1,32 @@
+# This is a vpython "spec" file.
+#
+# It describes patterns for python wheel dependencies of the python scripts in
+# the chromium repo, particularly for dependencies that have compiled components
+# (since pure-python dependencies can be easily vendored into third_party).
+#
+# When vpython is invoked, it finds this file and builds a python VirtualEnv,
+# containing all of the dependencies described in this file, fetching them from
+# CIPD (the "Chrome Infrastructure Package Deployer" service). Unlike `pip`,
+# this never requires the end-user machine to have a working python extension
+# compilation environment. All of these packages are built using:
+#   https://chromium.googlesource.com/infra/infra/+/main/infra/tools/dockerbuild/
+#
+# All python scripts in the repo share this same spec, to avoid dependency
+# fragmentation.
+#
+# If you have depot_tools installed in your $PATH, you can invoke python scripts
+# in this repo by running them as you normally would run them, except
+# substituting `vpython` instead of `python` on the command line, e.g.:
+#   vpython path/to/script.py some --arguments
+#
+# Read more about `vpython` and how to modify this file here:
+#   https://chromium.googlesource.com/infra/infra/+/main/doc/users/vpython.md
+
+python_version: "3.8"
+
+# Used by build/skia_gold_common/output_managerless_skia_gold_session.py
+# Used by tools/code_coverage/coverage.py
+wheel: <
+  name: "infra/python/wheels/six-py2_py3"
+  version: "version:1.15.0"
+>
diff --git a/testing/tools/skia_gold/skia_gold.py b/testing/tools/skia_gold/skia_gold.py
index 220f657..1f401cf 100644
--- a/testing/tools/skia_gold/skia_gold.py
+++ b/testing/tools/skia_gold/skia_gold.py
@@ -126,7 +126,7 @@
     if os.path.exists(output_file_name):
       os.remove(output_file_name)
     with open(output_file_name, 'wb') as outfile:
-      outfile.write(link)
+      outfile.write(link.encode('utf8'))
 
   def GetSkiaGoldProperties(self):
     if not self._skia_gold_properties: