# When will Plex Media Server shift to Python 3?

**URL:** <https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689>\
**Category:** Plex Media Server\
**Tags:** server-windows, server-mac, server-linux\
**Created:** [June 7, 2020, 4:24am UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689 "2020-06-07T04:24:37Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Brick\_Frog](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/brick_frog/32/193287_2.png) [@Brick\_Frog](https://forums.plex.tv/u/Brick_Frog)\
**Post date:** [June 7, 2020, 4:24am UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/1 "2020-06-07T04:24:37Z")

</div>

As of January 1st, Python 2 has been [sunsetted](https://www.python.org/doc/sunset-python-2/#:~:text=As%20of%20January%201st%2C%202020,%2C%202019). It’s no longer maintained upstream and no further patches or fixes, including security fixes, will be supported by the Python team. Debian is pushing to [remove it](https://lists.debian.org/debian-python/2019/07/msg00080.html).

Are there plans to shift to Python 3.x?  
Is there or will there be a testing release?

---

<div class="post-metadata">

**Author:** ![CostaHT](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/costaht/32/193414_2.png) [@CostaHT](https://forums.plex.tv/u/CostaHT)\
**Post date:** [June 7, 2020, 5:25pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/2 "2020-06-07T17:25:32Z")

</div>

I wish Plex developers were that close and spoke directly to us.

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [June 7, 2020, 6:49pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/5 "2020-06-07T18:49:41Z")

</div>

Removing all the streaming channels removed the biggest vulnerability.  
Now, the only use of plug-ins from Plex are those which we author.

Any security risk comes from user-added third party plug-ins.

---

<div class="post-metadata">

**Author:** ![adam.b.feldman](https://avatars.discourse-cdn.com/v4/letter/a/ecc23a/32.png) [@adam.b.feldman](https://forums.plex.tv/u/adam.b.feldman)\
**Post date:** [July 8, 2020, 4:29pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/6 "2020-07-08T16:29:20Z")

</div>

I’d highly recommend, and request that you reconsider leaving any Python as Py2 code. Distros will start dropping Python 2, I know for example, that Gentoo is in the process of doing that now. I’d hate to suddenly lose the ability to continue using PMS because there was no Py3 port.

---

<div class="post-metadata">

**Author:** ![Hupf](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/hupf/32/131840_2.png) [@Hupf](https://forums.plex.tv/u/Hupf)\
**Post date:** [September 21, 2020, 8:59am UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/10 "2020-09-21T08:59:28Z")

</div>

Another question from the downstream [Gentoo bugtracker](https://bugs.gentoo.org/735396#c4):  
Will it be possible to package PMS without Python 2.7 bundled, using the system libraries as a dependency instead?

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [September 21, 2020, 10:31am UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/11 "2020-09-21T10:31:21Z")

</div>

In short – No. Python 2.7 is interwoven in the “Resources” within PMS.  
There have been changes made to it over stock 2.7 distributions (security, e.g. SNI, etc)

---

<div class="post-metadata">

**Author:** ![pixelxeno](https://avatars.discourse-cdn.com/v4/letter/p/35a633/32.png) [@pixelxeno](https://forums.plex.tv/u/pixelxeno)\
**Post date:** [September 22, 2020, 2:38am UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/12 "2020-09-22T02:38:40Z")

</div>

Unfortunately, unless you can complete and release this in less than 30 days, gentoo users will lose the plex package, and will have to look at a migration solution to continue using plex for their distribution. The package has been lastrite’d yesterday due to this ongoing python2.7 issue, and will be gone on October 20th.

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [September 22, 2020, 4:31am UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/13 "2020-09-22T04:31:49Z")

</div>

That is Gentoo’s decision.

I don’t see how that stops anyone from installing PMS manually using the command line.

---

<div class="post-metadata">

**Author:** ![Avalanchee](https://avatars.discourse-cdn.com/v4/letter/a/919ad9/32.png) [@Avalanchee](https://forums.plex.tv/u/Avalanchee)\
**Post date:** [September 22, 2020, 9:34am UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/14 "2020-09-22T09:34:25Z")

</div>

Have to say this feels a little dismissive.  
Being removed from Gentoo Portage is a serious concern.  
Portage is the best feature about Gentoo since it provides stability and continuous updates to packages and their dependencies.  
Manually installing is always possible, but it’s not a typical use-case. It basically equates to side-loading an app on your phone.  
Many Gentoo users just won’t bother installing and manually maintaining a package outside Portage.

At this point all we ask for is a clear roadmap for phasing out Python 2.  
Thanks.

---

<div class="post-metadata">

**Author:** ![pixelxeno](https://avatars.discourse-cdn.com/v4/letter/p/35a633/32.png) [@pixelxeno](https://forums.plex.tv/u/pixelxeno)\
**Post date:** [September 22, 2020, 4:50pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/15 "2020-09-22T16:50:10Z")

</div>

What avalanchee said. And there’s also the migration headaches from one package to another. I’m now contemplating just sandboxing the whole of PMS for it seems to be a giant security risk.

---

<div class="post-metadata">

**Author:** ![jonesmz](https://avatars.discourse-cdn.com/v4/letter/j/bbce88/32.png) [@jonesmz](https://forums.plex.tv/u/jonesmz)\
**Post date:** [September 22, 2020, 6:12pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/16 "2020-09-22T18:12:32Z")

</div>

I’d like to second what the others have said.

The Plex package being removed from the Gentoo distribution means I’m going to stop using the product entirely.

Please provide some form of roadmap for phasing out Python 2.7.

The language is end-of-life regardless, and shouldn’t be used, especially not with custom patches.

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [September 22, 2020, 6:53pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/17 "2020-09-22T18:53:23Z")

</div>

Please allow me to express in a different way.

1. Effective PMS 1.15.0, our entire CI changed. At that time, **all** Linux binaries asserted the singular dependency on `glibc 2.14.1`. All external package dependencies were reduced to minimal required functionality and bound to PMS as runtime libraries (which now exist in the `lib` subdirectory).

2. Gentoo was never an officially supported distribution however the new installation scripting made installation on Gentoo easier.

3. The use of Python 2.7 is fully contained within PMS itself **as a PMS-specific runtime library which PMS and its processes load**

If you examine the contents of the `Resources` tree, nowhere will you find the Python 2.7 interpreter. I have included below for your reference.

```auto
[Resources] # find . -name \*py\*
./Python/lib/python2.7
./Python/lib/python2.7/audiodev.py
./Python/lib/python2.7/repr.py
./Python/lib/python2.7/gzip.py
./Python/lib/python2.7/gettext.py
./Python/lib/python2.7/UserDict.py
./Python/lib/python2.7/threading.py
./Python/lib/python2.7/dummy_threading.py
./Python/lib/python2.7/shutil.py
./Python/lib/python2.7/HTMLParser.py
./Python/lib/python2.7/pdb.py
./Python/lib/python2.7/statvfs.py
./Python/lib/python2.7/mimetools.py
./Python/lib/python2.7/compiler/pycodegen.py
./Python/lib/python2.7/compiler/pyassem.py
./Python/lib/python2.7/compiler/transformer.py
./Python/lib/python2.7/compiler/consts.py
./Python/lib/python2.7/compiler/symbols.py
./Python/lib/python2.7/compiler/future.py
./Python/lib/python2.7/compiler/visitor.py
./Python/lib/python2.7/compiler/misc.py
./Python/lib/python2.7/compiler/ast.py
./Python/lib/python2.7/compiler/syntax.py
./Python/lib/python2.7/compiler/ __init__.py
./Python/lib/python2.7/Cookie.py
./Python/lib/python2.7/io.py
./Python/lib/python2.7/toaiff.py
./Python/lib/python2.7/sre_constants.py
./Python/lib/python2.7/getopt.py
./Python/lib/python2.7/hmac.py
./Python/lib/python2.7/Bastion.py
./Python/lib/python2.7/string.py
./Python/lib/python2.7/ftplib.py
./Python/lib/python2.7/robotparser.py
./Python/lib/python2.7/cookielib.py
./Python/lib/python2.7/SocketServer.py
./Python/lib/python2.7/poplib.py
./Python/lib/python2.7/ssl.py
./Python/lib/python2.7/tabnanny.py
./Python/lib/python2.7/asynchat.py
./Python/lib/python2.7/subprocess.py
./Python/lib/python2.7/numbers.py
./Python/lib/python2.7/codecs.py
./Python/lib/python2.7/decimal.py
./Python/lib/python2.7/email/parser.py
./Python/lib/python2.7/email/charset.py
./Python/lib/python2.7/email/iterators.py
./Python/lib/python2.7/email/generator.py
./Python/lib/python2.7/email/quoprimime.py
./Python/lib/python2.7/email/message.py
./Python/lib/python2.7/email/base64mime.py
./Python/lib/python2.7/email/feedparser.py
./Python/lib/python2.7/email/mime/application.py
./Python/lib/python2.7/email/mime/text.py
./Python/lib/python2.7/email/mime/base.py
./Python/lib/python2.7/email/mime/message.py
./Python/lib/python2.7/email/mime/multipart.py
./Python/lib/python2.7/email/mime/audio.py
./Python/lib/python2.7/email/mime/nonmultipart.py
./Python/lib/python2.7/email/mime/ __init__.py
./Python/lib/python2.7/email/mime/image.py
./Python/lib/python2.7/email/encoders.py
./Python/lib/python2.7/email/utils.py
./Python/lib/python2.7/email/_parseaddr.py
./Python/lib/python2.7/email/ __init__.py
./Python/lib/python2.7/email/header.py
./Python/lib/python2.7/email/errors.py
./Python/lib/python2.7/sunaudio.py
./Python/lib/python2.7/profile.py
./Python/lib/python2.7/dis.py
./Python/lib/python2.7/xmllib.py
./Python/lib/python2.7/telnetlib.py
./Python/lib/python2.7/token.py
./Python/lib/python2.7/_abcoll.py
./Python/lib/python2.7/quopri.py
./Python/lib/python2.7/code.py
./Python/lib/python2.7/popen2.py
./Python/lib/python2.7/doctest.py
./Python/lib/python2.7/rlcompleter.py
./Python/lib/python2.7/contextlib.py
./Python/lib/python2.7/netrc.py
./Python/lib/python2.7/sre.py
./Python/lib/python2.7/mutex.py
./Python/lib/python2.7/nntplib.py
./Python/lib/python2.7/argparse.py
./Python/lib/python2.7/weakref.py
./Python/lib/python2.7/plistlib.py
./Python/lib/python2.7/genericpath.py
./Python/lib/python2.7/wave.py
./Python/lib/python2.7/traceback.py
./Python/lib/python2.7/dummy_thread.py
./Python/lib/python2.7/formatter.py
./Python/lib/python2.7/bdb.py
./Python/lib/python2.7/pkgutil.py
./Python/lib/python2.7/shelve.py
./Python/lib/python2.7/SimpleHTTPServer.py
./Python/lib/python2.7/re.py
./Python/lib/python2.7/macpath.py
./Python/lib/python2.7/dbhash.py
./Python/lib/python2.7/_weakrefset.py
./Python/lib/python2.7/user.py
./Python/lib/python2.7/ __phello__.foo.py
./Python/lib/python2.7/hashlib.py
./Python/lib/python2.7/imaplib.py
./Python/lib/python2.7/aifc.py
./Python/lib/python2.7/dumbdbm.py
./Python/lib/python2.7/webbrowser.py
./Python/lib/python2.7/sndhdr.py
./Python/lib/python2.7/antigravity.py
./Python/lib/python2.7/json/tool.py
./Python/lib/python2.7/json/scanner.py
./Python/lib/python2.7/json/tests/test_pass2.py
./Python/lib/python2.7/json/tests/test_fail.py
./Python/lib/python2.7/json/tests/test_speedups.py
./Python/lib/python2.7/json/tests/test_encode_basestring_ascii.py
./Python/lib/python2.7/json/tests/test_recursion.py
./Python/lib/python2.7/json/tests/test_unicode.py
./Python/lib/python2.7/json/tests/test_scanstring.py
./Python/lib/python2.7/json/tests/test_tool.py
./Python/lib/python2.7/json/tests/test_dump.py
./Python/lib/python2.7/json/tests/test_float.py
./Python/lib/python2.7/json/tests/test_indent.py
./Python/lib/python2.7/json/tests/test_pass3.py
./Python/lib/python2.7/json/tests/test_check_circular.py
./Python/lib/python2.7/json/tests/test_decode.py
./Python/lib/python2.7/json/tests/test_separators.py
./Python/lib/python2.7/json/tests/test_pass1.py
./Python/lib/python2.7/json/tests/test_default.py
./Python/lib/python2.7/json/tests/ __init__.py
./Python/lib/python2.7/json/encoder.py
./Python/lib/python2.7/json/decoder.py
./Python/lib/python2.7/json/ __init__.py
./Python/lib/python2.7/inspect.py
./Python/lib/python2.7/cmd.py
./Python/lib/python2.7/codeop.py
./Python/lib/python2.7/base64.py
./Python/lib/python2.7/plat-linux2/TYPES.py
./Python/lib/python2.7/plat-linux2/IN.py
./Python/lib/python2.7/plat-linux2/DLFCN.py
./Python/lib/python2.7/plat-linux2/CDROM.py
./Python/lib/python2.7/fractions.py
./Python/lib/python2.7/copy.py
./Python/lib/python2.7/ensurepip/_uninstall.py
./Python/lib/python2.7/ensurepip/ __main__.py
./Python/lib/python2.7/ensurepip/_bundled/setuptools-41.2.0-py2.py3-none-any.whl
./Python/lib/python2.7/ensurepip/_bundled/pip-19.2.3-py2.py3-none-any.whl
./Python/lib/python2.7/ensurepip/ __init__.py
./Python/lib/python2.7/sets.py
./Python/lib/python2.7/chunk.py
./Python/lib/python2.7/stat.py
./Python/lib/python2.7/tokenize.py
./Python/lib/python2.7/locale.py
./Python/lib/python2.7/pstats.py
./Python/lib/python2.7/fileinput.py
./Python/lib/python2.7/smtpd.py
./Python/lib/python2.7/runpy.py
./Python/lib/python2.7/imghdr.py
./Python/lib/python2.7/sgmllib.py
./Python/lib/python2.7/atexit.py
./Python/lib/python2.7/mimify.py
./Python/lib/python2.7/ntpath.py
./Python/lib/python2.7/tempfile.py
./Python/lib/python2.7/logging/handlers.py
./Python/lib/python2.7/logging/config.py
./Python/lib/python2.7/logging/ __init__.py
./Python/lib/python2.7/fpformat.py
./Python/lib/python2.7/sre_compile.py
./Python/lib/python2.7/socket.py
./Python/lib/python2.7/random.py
./Python/lib/python2.7/py_compile.py
./Python/lib/python2.7/sched.py
./Python/lib/python2.7/stringold.py
./Python/lib/python2.7/pickle.py
./Python/lib/python2.7/mhlib.py
./Python/lib/python2.7/cgitb.py
./Python/lib/python2.7/curses/textpad.py
./Python/lib/python2.7/curses/panel.py
./Python/lib/python2.7/curses/wrapper.py
./Python/lib/python2.7/curses/has_key.py
./Python/lib/python2.7/curses/ __init__.py
./Python/lib/python2.7/curses/ascii.py
./Python/lib/python2.7/urlparse.py
./Python/lib/python2.7/MimeWriter.py
./Python/lib/python2.7/cgi.py
./Python/lib/python2.7/getpass.py
./Python/lib/python2.7/modulefinder.py
./Python/lib/python2.7/_strptime.py
./Python/lib/python2.7/whichdb.py
./Python/lib/python2.7/sha.py
./Python/lib/python2.7/new.py
./Python/lib/python2.7/ __future__.py
./Python/lib/python2.7/filecmp.py
./Python/lib/python2.7/htmlentitydefs.py
./Python/lib/python2.7/linecache.py
./Python/lib/python2.7/colorsys.py
./Python/lib/python2.7/sqlite3/dump.py
./Python/lib/python2.7/sqlite3/dbapi2.py
./Python/lib/python2.7/sqlite3/ __init__.py
./Python/lib/python2.7/md5.py
./Python/lib/python2.7/platform.py
./Python/lib/python2.7/mimetypes.py
./Python/lib/python2.7/StringIO.py
./Python/lib/python2.7/encodings/cp857.py
./Python/lib/python2.7/encodings/cp1256.py
./Python/lib/python2.7/encodings/cp1006.py
./Python/lib/python2.7/encodings/rot_13.py
./Python/lib/python2.7/encodings/iso2022_jp_1.py
./Python/lib/python2.7/encodings/mbcs.py
./Python/lib/python2.7/encodings/mac_farsi.py
./Python/lib/python2.7/encodings/cp866.py
./Python/lib/python2.7/encodings/gb2312.py
./Python/lib/python2.7/encodings/iso2022_jp_2.py
./Python/lib/python2.7/encodings/iso8859_11.py
./Python/lib/python2.7/encodings/cp1254.py
./Python/lib/python2.7/encodings/cp860.py
./Python/lib/python2.7/encodings/mac_iceland.py
./Python/lib/python2.7/encodings/cp1251.py
./Python/lib/python2.7/encodings/iso8859_6.py
./Python/lib/python2.7/encodings/cp500.py
./Python/lib/python2.7/encodings/cp720.py
./Python/lib/python2.7/encodings/iso8859_3.py
./Python/lib/python2.7/encodings/cp863.py
./Python/lib/python2.7/encodings/cp1253.py
./Python/lib/python2.7/encodings/iso8859_2.py
./Python/lib/python2.7/encodings/zlib_codec.py
./Python/lib/python2.7/encodings/hz.py
./Python/lib/python2.7/encodings/gb18030.py
./Python/lib/python2.7/encodings/cp1257.py
./Python/lib/python2.7/encodings/iso2022_jp_ext.py
./Python/lib/python2.7/encodings/cp037.py
./Python/lib/python2.7/encodings/cp858.py
./Python/lib/python2.7/encodings/idna.py
./Python/lib/python2.7/encodings/iso8859_14.py
./Python/lib/python2.7/encodings/shift_jisx0213.py
./Python/lib/python2.7/encodings/iso8859_16.py
./Python/lib/python2.7/encodings/iso8859_1.py
./Python/lib/python2.7/encodings/iso8859_13.py
./Python/lib/python2.7/encodings/cp865.py
./Python/lib/python2.7/encodings/cp864.py
./Python/lib/python2.7/encodings/mac_roman.py
./Python/lib/python2.7/encodings/cp950.py
./Python/lib/python2.7/encodings/latin_1.py
./Python/lib/python2.7/encodings/unicode_escape.py
./Python/lib/python2.7/encodings/cp856.py
./Python/lib/python2.7/encodings/utf_32_le.py
./Python/lib/python2.7/encodings/iso8859_8.py
./Python/lib/python2.7/encodings/base64_codec.py
./Python/lib/python2.7/encodings/iso2022_jp_2004.py
./Python/lib/python2.7/encodings/cp1252.py
./Python/lib/python2.7/encodings/iso8859_5.py
./Python/lib/python2.7/encodings/cp852.py
./Python/lib/python2.7/encodings/utf_16.py
./Python/lib/python2.7/encodings/mac_centeuro.py
./Python/lib/python2.7/encodings/cp775.py
./Python/lib/python2.7/encodings/cp1026.py
./Python/lib/python2.7/encodings/hex_codec.py
./Python/lib/python2.7/encodings/charmap.py
./Python/lib/python2.7/encodings/ptcp154.py
./Python/lib/python2.7/encodings/shift_jis.py
./Python/lib/python2.7/encodings/cp855.py
./Python/lib/python2.7/encodings/utf_32_be.py
./Python/lib/python2.7/encodings/utf_16_be.py
./Python/lib/python2.7/encodings/cp1255.py
./Python/lib/python2.7/encodings/cp1140.py
./Python/lib/python2.7/encodings/johab.py
./Python/lib/python2.7/encodings/cp437.py
./Python/lib/python2.7/encodings/cp861.py
./Python/lib/python2.7/encodings/euc_jisx0213.py
./Python/lib/python2.7/encodings/uu_codec.py
./Python/lib/python2.7/encodings/mac_latin2.py
./Python/lib/python2.7/encodings/cp862.py
./Python/lib/python2.7/encodings/iso2022_kr.py
./Python/lib/python2.7/encodings/iso8859_4.py
./Python/lib/python2.7/encodings/tis_620.py
./Python/lib/python2.7/encodings/utf_32.py
./Python/lib/python2.7/encodings/koi8_r.py
./Python/lib/python2.7/encodings/koi8_u.py
./Python/lib/python2.7/encodings/iso2022_jp.py
./Python/lib/python2.7/encodings/utf_8.py
./Python/lib/python2.7/encodings/hp_roman8.py
./Python/lib/python2.7/encodings/mac_croatian.py
./Python/lib/python2.7/encodings/cp424.py
./Python/lib/python2.7/encodings/iso8859_15.py
./Python/lib/python2.7/encodings/cp1250.py
./Python/lib/python2.7/encodings/euc_jis_2004.py
./Python/lib/python2.7/encodings/utf_7.py
./Python/lib/python2.7/encodings/cp1258.py
./Python/lib/python2.7/encodings/iso8859_10.py
./Python/lib/python2.7/encodings/big5.py
./Python/lib/python2.7/encodings/aliases.py
./Python/lib/python2.7/encodings/big5hkscs.py
./Python/lib/python2.7/encodings/euc_kr.py
./Python/lib/python2.7/encodings/cp850.py
./Python/lib/python2.7/encodings/utf_16_le.py
./Python/lib/python2.7/encodings/string_escape.py
./Python/lib/python2.7/encodings/shift_jis_2004.py
./Python/lib/python2.7/encodings/raw_unicode_escape.py
./Python/lib/python2.7/encodings/mac_greek.py
./Python/lib/python2.7/encodings/cp874.py
./Python/lib/python2.7/encodings/cp737.py
./Python/lib/python2.7/encodings/mac_cyrillic.py
./Python/lib/python2.7/encodings/utf_8_sig.py
./Python/lib/python2.7/encodings/undefined.py
./Python/lib/python2.7/encodings/quopri_codec.py
./Python/lib/python2.7/encodings/bz2_codec.py
./Python/lib/python2.7/encodings/unicode_internal.py
./Python/lib/python2.7/encodings/cp875.py
./Python/lib/python2.7/encodings/cp869.py
./Python/lib/python2.7/encodings/euc_jp.py
./Python/lib/python2.7/encodings/mac_turkish.py
./Python/lib/python2.7/encodings/cp949.py
./Python/lib/python2.7/encodings/iso2022_jp_3.py
./Python/lib/python2.7/encodings/iso8859_7.py
./Python/lib/python2.7/encodings/ __init__.py
./Python/lib/python2.7/encodings/mac_romanian.py
./Python/lib/python2.7/encodings/ascii.py
./Python/lib/python2.7/encodings/palmos.py
./Python/lib/python2.7/encodings/cp932.py
./Python/lib/python2.7/encodings/gbk.py
./Python/lib/python2.7/encodings/punycode.py
./Python/lib/python2.7/encodings/iso8859_9.py
./Python/lib/python2.7/encodings/mac_arabic.py
./Python/lib/python2.7/hotshot/log.py
./Python/lib/python2.7/hotshot/stones.py
./Python/lib/python2.7/hotshot/stats.py
./Python/lib/python2.7/hotshot/ __init__.py
./Python/lib/python2.7/optparse.py
./Python/lib/python2.7/shlex.py
./Python/lib/python2.7/keyword.py
./Python/lib/python2.7/abc.py
./Python/lib/python2.7/wsgiref/handlers.py
./Python/lib/python2.7/wsgiref/util.py
./Python/lib/python2.7/wsgiref/validate.py
./Python/lib/python2.7/wsgiref/simple_server.py
./Python/lib/python2.7/wsgiref/headers.py
./Python/lib/python2.7/wsgiref/ __init__.py
./Python/lib/python2.7/tarfile.py
./Python/lib/python2.7/httplib.py
./Python/lib/python2.7/opcode.py
./Python/lib/python2.7/ConfigParser.py
./Python/lib/python2.7/pydoc_data
./Python/lib/python2.7/pydoc_data/topics.py
./Python/lib/python2.7/pydoc_data/ __init__.py
./Python/lib/python2.7/pyclbr.py
./Python/lib/python2.7/unittest/suite.py
./Python/lib/python2.7/unittest/util.py
./Python/lib/python2.7/unittest/signals.py
./Python/lib/python2.7/unittest/case.py
./Python/lib/python2.7/unittest/runner.py
./Python/lib/python2.7/unittest/ __main__.py
./Python/lib/python2.7/unittest/loader.py
./Python/lib/python2.7/unittest/main.py
./Python/lib/python2.7/unittest/result.py
./Python/lib/python2.7/unittest/ __init__.py
./Python/lib/python2.7/heapq.py
./Python/lib/python2.7/UserList.py
./Python/lib/python2.7/imputil.py
./Python/lib/python2.7/binhex.py
./Python/lib/python2.7/copy_reg.py
./Python/lib/python2.7/_LWPCookieJar.py
./Python/lib/python2.7/os2emxpath.py
./Python/lib/python2.7/difflib.py
./Python/lib/python2.7/ast.py
./Python/lib/python2.7/posixpath.py
./Python/lib/python2.7/ihooks.py
./Python/lib/python2.7/this.py
./Python/lib/python2.7/struct.py
./Python/lib/python2.7/uu.py
./Python/lib/python2.7/htmllib.py
./Python/lib/python2.7/SimpleXMLRPCServer.py
./Python/lib/python2.7/uuid.py
./Python/lib/python2.7/site-packages/lxml/isoschematron/ __init__.py
./Python/lib/python2.7/site-packages/lxml/html/_setmixin.py
./Python/lib/python2.7/site-packages/lxml/html/diff.py
./Python/lib/python2.7/site-packages/lxml/html/_html5builder.py
./Python/lib/python2.7/site-packages/lxml/html/ElementSoup.py
./Python/lib/python2.7/site-packages/lxml/html/builder.py
./Python/lib/python2.7/site-packages/lxml/html/soupparser.py
./Python/lib/python2.7/site-packages/lxml/html/formfill.py
./Python/lib/python2.7/site-packages/lxml/html/html5parser.py
./Python/lib/python2.7/site-packages/lxml/html/clean.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_rewritelinks.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_feedparser_data.py
./Python/lib/python2.7/site-packages/lxml/html/tests/transform_feedparser_data.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_clean.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_forms.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_elementsoup.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_autolink.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_formfill.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_xhtml.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_diff.py
./Python/lib/python2.7/site-packages/lxml/html/tests/test_basic.py
./Python/lib/python2.7/site-packages/lxml/html/tests/ __init__.py
./Python/lib/python2.7/site-packages/lxml/html/defs.py
./Python/lib/python2.7/site-packages/lxml/html/ __init__.py
./Python/lib/python2.7/site-packages/lxml/html/_diffcommand.py
./Python/lib/python2.7/site-packages/lxml/html/usedoctest.py
./Python/lib/python2.7/site-packages/lxml/html/_dictmixin.py
./Python/lib/python2.7/site-packages/lxml/builder.py
./Python/lib/python2.7/site-packages/lxml/_elementpath.py
./Python/lib/python2.7/site-packages/lxml/ElementInclude.py
./Python/lib/python2.7/site-packages/lxml/pyclasslookup.py
./Python/lib/python2.7/site-packages/lxml/cssselect.py
./Python/lib/python2.7/site-packages/lxml/doctestcompare.py
./Python/lib/python2.7/site-packages/lxml/ __init__.py
./Python/lib/python2.7/site-packages/lxml/usedoctest.py
./Python/lib/python2.7/site-packages/lxml/sax.py
./Python/lib/python2.7/site-packages/simplejson/tool.py
./Python/lib/python2.7/site-packages/simplejson/ordered_dict.py
./Python/lib/python2.7/site-packages/simplejson/scanner.py
./Python/lib/python2.7/site-packages/simplejson/compat.py
./Python/lib/python2.7/site-packages/simplejson/encoder.py
./Python/lib/python2.7/site-packages/simplejson/decoder.py
./Python/lib/python2.7/site-packages/simplejson/ __init__.py
./Python/lib/python2.7/asyncore.py
./Python/lib/python2.7/zipfile.py
./Python/lib/python2.7/glob.py
./Python/lib/python2.7/os.py
./Python/lib/python2.7/types.py
./Python/lib/python2.7/calendar.py
./Python/lib/python2.7/multiprocessing/forking.py
./Python/lib/python2.7/multiprocessing/util.py
./Python/lib/python2.7/multiprocessing/connection.py
./Python/lib/python2.7/multiprocessing/synchronize.py
./Python/lib/python2.7/multiprocessing/sharedctypes.py
./Python/lib/python2.7/multiprocessing/queues.py
./Python/lib/python2.7/multiprocessing/managers.py
./Python/lib/python2.7/multiprocessing/reduction.py
./Python/lib/python2.7/multiprocessing/process.py
./Python/lib/python2.7/multiprocessing/heap.py
./Python/lib/python2.7/multiprocessing/pool.py
./Python/lib/python2.7/multiprocessing/dummy/connection.py
./Python/lib/python2.7/multiprocessing/dummy/ __init__.py
./Python/lib/python2.7/multiprocessing/ __init__.py
./Python/lib/python2.7/markupbase.py
./Python/lib/python2.7/anydbm.py
./Python/lib/python2.7/xdrlib.py
./Python/lib/python2.7/functools.py
./Python/lib/python2.7/macurl2path.py
./Python/lib/python2.7/cProfile.py
./Python/lib/python2.7/UserString.py
./Python/lib/python2.7/importlib/ __init__.py
./Python/lib/python2.7/mailbox.py
./Python/lib/python2.7/xmlrpclib.py
./Python/lib/python2.7/pickletools.py
./Python/lib/python2.7/pydoc.py
./Python/lib/python2.7/symbol.py
./Python/lib/python2.7/compileall.py
./Python/lib/python2.7/pipes.py
./Python/lib/python2.7/pty.py
./Python/lib/python2.7/xml/sax/xmlreader.py
./Python/lib/python2.7/xml/sax/_exceptions.py
./Python/lib/python2.7/xml/sax/handler.py
./Python/lib/python2.7/xml/sax/expatreader.py
./Python/lib/python2.7/xml/sax/saxutils.py
./Python/lib/python2.7/xml/sax/ __init__.py
./Python/lib/python2.7/xml/etree/ElementInclude.py
./Python/lib/python2.7/xml/etree/ElementPath.py
./Python/lib/python2.7/xml/etree/ElementTree.py
./Python/lib/python2.7/xml/etree/cElementTree.py
./Python/lib/python2.7/xml/etree/ __init__.py
./Python/lib/python2.7/xml/dom/expatbuilder.py
./Python/lib/python2.7/xml/dom/pulldom.py
./Python/lib/python2.7/xml/dom/NodeFilter.py
./Python/lib/python2.7/xml/dom/minicompat.py
./Python/lib/python2.7/xml/dom/domreg.py
./Python/lib/python2.7/xml/dom/xmlbuilder.py
./Python/lib/python2.7/xml/dom/minidom.py
./Python/lib/python2.7/xml/dom/ __init__.py
./Python/lib/python2.7/xml/parsers/expat.py
./Python/lib/python2.7/xml/parsers/ __init__.py
./Python/lib/python2.7/xml/ __init__.py
./Python/lib/python2.7/timeit.py
./Python/lib/python2.7/urllib2.py
./Python/lib/python2.7/_osx_support.py
./Python/lib/python2.7/fnmatch.py
./Python/lib/python2.7/collections.py
./Python/lib/python2.7/_sysconfigdata.py
./Python/lib/python2.7/posixfile.py
./Python/lib/python2.7/smtplib.py
./Python/lib/python2.7/stringprep.py
./Python/lib/python2.7/_pyio.py
./Python/lib/python2.7/sre_parse.py
./Python/lib/python2.7/bisect.py
./Python/lib/python2.7/dircache.py
./Python/lib/python2.7/warnings.py
./Python/lib/python2.7/lib-dynload/pyexpat.so
./Python/lib/python2.7/lib-dynload/Python-2.7.12-py2.7.egg-info
./Python/lib/python2.7/lib2to3/btm_utils.py
./Python/lib/python2.7/lib2to3/fixes/fix_imports2.py
./Python/lib/python2.7/lib2to3/fixes/fix_print.py
./Python/lib/python2.7/lib2to3/fixes/fix_funcattrs.py
./Python/lib/python2.7/lib2to3/fixes/fix_except.py
./Python/lib/python2.7/lib2to3/fixes/fix_operator.py
./Python/lib/python2.7/lib2to3/fixes/fix_isinstance.py
./Python/lib/python2.7/lib2to3/fixes/fix_intern.py
./Python/lib/python2.7/lib2to3/fixes/fix_reduce.py
./Python/lib/python2.7/lib2to3/fixes/fix_dict.py
./Python/lib/python2.7/lib2to3/fixes/fix_imports.py
./Python/lib/python2.7/lib2to3/fixes/fix_basestring.py
./Python/lib/python2.7/lib2to3/fixes/fix_xreadlines.py
./Python/lib/python2.7/lib2to3/fixes/fix_next.py
./Python/lib/python2.7/lib2to3/fixes/fix_exitfunc.py
./Python/lib/python2.7/lib2to3/fixes/fix_has_key.py
./Python/lib/python2.7/lib2to3/fixes/fix_methodattrs.py
./Python/lib/python2.7/lib2to3/fixes/fix_ne.py
./Python/lib/python2.7/lib2to3/fixes/fix_exec.py
./Python/lib/python2.7/lib2to3/fixes/fix_apply.py
./Python/lib/python2.7/lib2to3/fixes/fix_map.py
./Python/lib/python2.7/lib2to3/fixes/fix_itertools_imports.py
./Python/lib/python2.7/lib2to3/fixes/fix_throw.py
./Python/lib/python2.7/lib2to3/fixes/fix_execfile.py
./Python/lib/python2.7/lib2to3/fixes/fix_numliterals.py
./Python/lib/python2.7/lib2to3/fixes/fix_itertools.py
./Python/lib/python2.7/lib2to3/fixes/fix_buffer.py
./Python/lib/python2.7/lib2to3/fixes/fix_tuple_params.py
./Python/lib/python2.7/lib2to3/fixes/fix_types.py
./Python/lib/python2.7/lib2to3/fixes/fix_raise.py
./Python/lib/python2.7/lib2to3/fixes/fix_idioms.py
./Python/lib/python2.7/lib2to3/fixes/fix_renames.py
./Python/lib/python2.7/lib2to3/fixes/fix_long.py
./Python/lib/python2.7/lib2to3/fixes/fix_nonzero.py
./Python/lib/python2.7/lib2to3/fixes/fix_raw_input.py
./Python/lib/python2.7/lib2to3/fixes/fix_urllib.py
./Python/lib/python2.7/lib2to3/fixes/fix_import.py
./Python/lib/python2.7/lib2to3/fixes/fix_asserts.py
./Python/lib/python2.7/lib2to3/fixes/fix_unicode.py
./Python/lib/python2.7/lib2to3/fixes/fix_repr.py
./Python/lib/python2.7/lib2to3/fixes/fix_standarderror.py
./Python/lib/python2.7/lib2to3/fixes/fix_sys_exc.py
./Python/lib/python2.7/lib2to3/fixes/fix_ws_comma.py
./Python/lib/python2.7/lib2to3/fixes/fix_future.py
./Python/lib/python2.7/lib2to3/fixes/fix_zip.py
./Python/lib/python2.7/lib2to3/fixes/fix_filter.py
./Python/lib/python2.7/lib2to3/fixes/fix_metaclass.py
./Python/lib/python2.7/lib2to3/fixes/fix_xrange.py
./Python/lib/python2.7/lib2to3/fixes/fix_getcwdu.py
./Python/lib/python2.7/lib2to3/fixes/ __init__.py
./Python/lib/python2.7/lib2to3/fixes/fix_set_literal.py
./Python/lib/python2.7/lib2to3/fixes/fix_input.py
./Python/lib/python2.7/lib2to3/fixes/fix_paren.py
./Python/lib/python2.7/lib2to3/pytree.py
./Python/lib/python2.7/lib2to3/fixer_util.py
./Python/lib/python2.7/lib2to3/ __main__.py
./Python/lib/python2.7/lib2to3/refactor.py
./Python/lib/python2.7/lib2to3/patcomp.py
./Python/lib/python2.7/lib2to3/fixer_base.py
./Python/lib/python2.7/lib2to3/pgen2/parse.py
./Python/lib/python2.7/lib2to3/pgen2/literals.py
./Python/lib/python2.7/lib2to3/pgen2/pgen.py
./Python/lib/python2.7/lib2to3/pgen2/tokenize.py
./Python/lib/python2.7/lib2to3/pgen2/conv.py
./Python/lib/python2.7/lib2to3/pgen2/grammar.py
./Python/lib/python2.7/lib2to3/pgen2/token.py
./Python/lib/python2.7/lib2to3/pgen2/ __init__.py
./Python/lib/python2.7/lib2to3/pgen2/driver.py
./Python/lib/python2.7/lib2to3/tests/test_pytree.py
./Python/lib/python2.7/lib2to3/tests/support.py
./Python/lib/python2.7/lib2to3/tests/data/bom.py
./Python/lib/python2.7/lib2to3/tests/data/fixers/myfixes/fix_preorder.py
./Python/lib/python2.7/lib2to3/tests/data/fixers/myfixes/fix_parrot.py
./Python/lib/python2.7/lib2to3/tests/data/fixers/myfixes/fix_last.py
./Python/lib/python2.7/lib2to3/tests/data/fixers/myfixes/fix_explicit.py
./Python/lib/python2.7/lib2to3/tests/data/fixers/myfixes/fix_first.py
./Python/lib/python2.7/lib2to3/tests/data/fixers/myfixes/ __init__.py
./Python/lib/python2.7/lib2to3/tests/data/fixers/parrot_example.py
./Python/lib/python2.7/lib2to3/tests/data/fixers/bad_order.py
./Python/lib/python2.7/lib2to3/tests/data/fixers/no_fixer_cls.py
./Python/lib/python2.7/lib2to3/tests/data/crlf.py
./Python/lib/python2.7/lib2to3/tests/data/py3_test_grammar.py
./Python/lib/python2.7/lib2to3/tests/data/infinite_recursion.py
./Python/lib/python2.7/lib2to3/tests/data/different_encoding.py
./Python/lib/python2.7/lib2to3/tests/data/py2_test_grammar.py
./Python/lib/python2.7/lib2to3/tests/data/false_encoding.py
./Python/lib/python2.7/lib2to3/tests/test_main.py
./Python/lib/python2.7/lib2to3/tests/test_parser.py
./Python/lib/python2.7/lib2to3/tests/test_all_fixers.py
./Python/lib/python2.7/lib2to3/tests/pytree_idempotency.py
./Python/lib/python2.7/lib2to3/tests/test_util.py
./Python/lib/python2.7/lib2to3/tests/test_fixers.py
./Python/lib/python2.7/lib2to3/tests/test_refactor.py
./Python/lib/python2.7/lib2to3/tests/ __init__.py
./Python/lib/python2.7/lib2to3/main.py
./Python/lib/python2.7/lib2to3/pygram.py
./Python/lib/python2.7/lib2to3/btm_matcher.py
./Python/lib/python2.7/lib2to3/ __init__.py
./Python/lib/python2.7/rexec.py
./Python/lib/python2.7/CGIHTTPServer.py
./Python/lib/python2.7/pprint.py
./Python/lib/python2.7/_threading_local.py
./Python/lib/python2.7/BaseHTTPServer.py
./Python/lib/python2.7/tty.py
./Python/lib/python2.7/ctypes/_endian.py
./Python/lib/python2.7/ctypes/util.py
./Python/lib/python2.7/ctypes/macholib/dyld.py
./Python/lib/python2.7/ctypes/macholib/dylib.py
./Python/lib/python2.7/ctypes/macholib/framework.py
./Python/lib/python2.7/ctypes/macholib/ __init__.py
./Python/lib/python2.7/ctypes/wintypes.py
./Python/lib/python2.7/ctypes/ __init__.py
./Python/lib/python2.7/nturl2path.py
./Python/lib/python2.7/trace.py
./Python/lib/python2.7/sunau.py
./Python/lib/python2.7/site.py
./Python/lib/python2.7/sysconfig.py
./Python/lib/python2.7/symtable.py
./Python/lib/python2.7/commands.py
./Python/lib/python2.7/multifile.py
./Python/lib/python2.7/DocXMLRPCServer.py
./Python/lib/python2.7/urllib.py
./Python/lib/python2.7/textwrap.py
./Python/lib/python2.7/mailcap.py
./Python/lib/python2.7/rfc822.py
./Python/lib/python2.7/csv.py
./Python/lib/python2.7/Queue.py
./Python/lib/python2.7/_MozillaCookieJar.py
./Python/include/python2.7
./Python/include/python2.7/pyconfig.h
./html_parser __init__.py
./Plug-ins-a78fef9a9/Fanart-TV.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/PlexMusic.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/LastFM.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/PersonalMedia.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/OpenSubtitles.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/PlexThemeMusic.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Code/helpers.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Code/localmedia.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Code/subtitlehelpers.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Code/config.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Code/audiohelpers.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Code/videohelpers.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/_id3specs.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/ __init__.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/monkeysaudio.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/oggspeex.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/optimfrog.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/_constants.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/oggvorbis.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/easyid3.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/oggopus.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/m4a.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/wavpack.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/trueaudio.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/_id3util.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/asf.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/_compat.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/_vorbis.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/musepack.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/easymp4.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/oggflac.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/ogg.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/oggtheora.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/_util.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/id3.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/mp4.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/flac.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/apev2.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/aiff.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/mp3.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mutagen/_id3frames.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/UnicodeHelper.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/ID3.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mp4file/ __init__.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mp4file/atom.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mp4file/mp4file.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mp4file/atomsearch_test.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/mp4file/atomsearch.py
./Plug-ins-a78fef9a9/LocalMedia.bundle/Contents/Libraries/Shared/ID3v2.py
./Plug-ins-a78fef9a9/PlexMovieNew.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/installservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/messageservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/scannerservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/flagservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/peerservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/storeservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/codeservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/proxyservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/streamservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/systemservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/helpservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/agentservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/playerservice.py
./Plug-ins-a78fef9a9/System.bundle/Contents/Code/bundleservice.py
./Plug-ins-a78fef9a9/Musicbrainz.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/MoviePosterDB.bundle/Contents/Code/ __init__.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Music/Plex Premium Music Scanner.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Music/Plex Music Scanner.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Music/Plex Music.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Series/Plex Series Scanner.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Photos/Plex Photo Scanner.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/AudioFiles.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/_id3specs.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/ __init__.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/monkeysaudio.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/oggspeex.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/optimfrog.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/_constants.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/oggvorbis.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/easyid3.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/oggopus.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/m4a.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/wavpack.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/trueaudio.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/_id3util.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/asf.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/_compat.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/_vorbis.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/musepack.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/easymp4.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/oggflac.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/ogg.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/oggtheora.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/_util.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/id3.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/mp4.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/flac.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/apev2.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/aiff.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/mp3.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mutagen/_id3frames.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/Utils.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/titlecase.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/Media.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/UnicodeHelper.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/Filter.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/ID3.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/M4ATags.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mp4file/ __init__.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mp4file/atom.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mp4file/mp4file.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/mp4file/atomsearch.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/PhotoFiles.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/VideoFiles.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/ID3v2.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Common/Stack.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Movies/Plex Video Files.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Movies/Plex Movie Scanner.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Movies/Plex Movie.py
./Plug-ins-a78fef9a9/Scanners.bundle/Contents/Resources/Movies/Plex Video Files Scanner.py
./Plug-ins-a78fef9a9/Framework.bundle/Contents/Resources/Platforms/Shared/Libraries/threading_new.py
[Resources] # 

```

_ **Output truncated due to length restrictions** _

As you can see above, no **python** interpretor exists.

If you examine the distribution package itself, you find only the dedicated Python runtime library which is compiled and bound to Plex’s use only.

```auto
[lib] # echo *py*
libpython2.7.so.1.0
[lib] #

```

While I can appreciate the assertion Python 2.7 is a security hole, let’s consider the whole picture; Python itself is a security hole because it is interpreted. Any `.py` file can be modified and the unsuspecting user could invoke a contaminated function with elevated privileges and propagate whatever chaos / malicious code was implanted.

It is for this reason, coupled with PMS’s exclusive internal use of Python 2.7, I do not understand the demand by the Gentoo community to have Python 3 within the next 30 days.

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [September 22, 2020, 7:46pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/18 "2020-09-22T19:46:55Z")

</div>

Addendum:

Please explain to me the precise reasons for the objection to Python 2.7 when used in this manner

---

<div class="post-metadata">

**Author:** ![Avalanchee](https://avatars.discourse-cdn.com/v4/letter/a/919ad9/32.png) [@Avalanchee](https://forums.plex.tv/u/Avalanchee)\
**Post date:** [September 22, 2020, 8:04pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/19 "2020-09-22T20:04:57Z")

</div>

Chuck,  
Thank you for your detailed and good-willed response.

I may not be the best person to address this, since my knowledge in Gentoo architecture is less than expert-level, but I believe that the bundled Python runtime library you mentioned isn’t being used in Gentoo’s case.

With Portage there is a dependency tree that pulls the required packages before compiling and installing the software, in this case Python is being pulled for Plex.  
As you can see from the ebuild files, Plex depends on Python2.7 directly:

> **[media-tv/plex-media-server – Gentoo Packages](https://packages.gentoo.org/packages/media-tv/plex-media-server/dependencies)**

  

> **[plex-media-server-1.19.5.ebuild\\plex-media-server\\media-tv - repo/gentoo.git...](https://gitweb.gentoo.org/repo/gentoo.git/tree/media-tv/plex-media-server/plex-media-server-1.19.5.ebuild)**

```auto
PYTHON_COMPAT=( python2_7 )

```

That means that whenever Plex is installed on Gentoo, Portage will grab the Python 2.7 interpreter and install it on the system.  
Therefore any installation of software that depends explicitly on Python 2.7 inherently reduces the security of the system by installing this no-longer-maintained runtime environment.

Gentoo community considers these packages a security risk since Jan 2020. We are now 9 months later and so the offending packages are starting to be removed.

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [September 22, 2020, 8:20pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/20 "2020-09-22T20:20:09Z")

</div>

Ah! There is the error.

Whatever, or whomever, generated that made a mistake.

We had to turn off all automatics as well with PMS 1.15.0. Our old packaging made the same mistake.

There are no external Python requirements – NONE.

The only requirement is `glibc 2.14.1`

From our RPM packaging, please examine the our spec file.  
You’ll notice we do not use automatic dependency inclusion. This is the safeguard to block Python 2 or any other unwanted packages.

```auto
Name: plexmediaserver
Version: ##VERSION##
Release: ##RELEASE##
Summary: Plex organizes all of your personal media so you can easily access and enjoy it.
License: Plex Inc.
Distribution: Redhat
Group: Converted/video

%define _rpmdir .
%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
%define _unpackaged_files_terminate_build 0

# Turn off automatic dependency searching and inclusion
Autoprov: 0

# Turn off automatic requirements searching and inclusion (e.g. Python 2)
Autoreqprov: 0

# Specifically state we provide 'plexmediaserver'
Provides: plexmediaserver config(plexmediaserver)

%pre

```

The binaries are compiled and given to the packaging with only `glibc` as a needed shared object lib. All others are resolved at package compile & link time.

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [September 22, 2020, 8:48pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/21 "2020-09-22T20:48:50Z")

</div>

Reviewing the link at [https://gitweb.gentoo.org/repo/gentoo.git/tree/media-tv/plex-media-server/plex-media-server-1.19.5.ebuild](https://gitweb.gentoo.org/repo/gentoo.git/tree/media-tv/plex-media-server/plex-media-server-1.19.5.ebuild)

I’ve encountered some more errors.

I’ll help you sort them out if you wish.

---

<div class="post-metadata">

**Author:** ![annathewitch](https://avatars.discourse-cdn.com/v4/letter/a/d2c977/32.png) [@annathewitch](https://forums.plex.tv/u/annathewitch)\
**Post date:** [September 22, 2020, 9:51pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/22 "2020-09-22T21:51:29Z")

</div>

came here expecting to be kind of upset there was heel-dragging on this but glad to see there is active attention to the issue, i miss things like being able to get updates in gentoo and am not looking forward to the headache of having to manually maintain my plex installation if this is not fixed.

if you haven’t seen the gentoo bugs thread about it, this might help: [https://bugs.gentoo.org/735396](https://bugs.gentoo.org/735396)

i know gentoo isn’t supported but i bought my plex pass in good faith that i can continue to use plex indefinitely without too much hassle, and i genuinely appreciate attention to the matter

---

<div class="post-metadata">

**Author:** ![chriscpritchard](https://avatars.discourse-cdn.com/v4/letter/c/e36b37/32.png) [@chriscpritchard](https://forums.plex.tv/u/chriscpritchard)\
**Post date:** [September 22, 2020, 10:00pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/23 "2020-09-22T22:00:48Z")

</div>

If they can be sorted, even if not kept in the main tree, it’s possible to keep plex up to date with an overlay (will just need version numbers changing each update unless there’s a major change).

What are the errors and I’m sure they shouldn’t be too tricky to fix.

---

<div class="post-metadata">

**Author:** ![ChuckPa](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/chuckpa/32/79710_2.png) [@ChuckPa](https://forums.plex.tv/u/ChuckPa)\
**Post date:** [September 22, 2020, 10:13pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/24 "2020-09-22T22:13:39Z")

</div>

The errors I’ve spotted so far are:

1. The obvious inclusion of Python as a detected dependency. There are no externals for our binaries beyond glibc 2.14.1

2. You are forcing RPATH. We have RPATH pre-set to `./lib`. Altering it is the error.

3. I see you have both init and systemd ? You’ll find the master copies, which my packaging script installs in `/usr/lib/plexmediaserver/lib` (plexmediaserver.service (systemd),  
plexmediaserver.init (SYSV init), and plexmediaserver.default – for /etc/defaults/plexmediaserver)

4. I package `/usr/lib/plexmediaserver/lib/plexmediaserver.init` which is the SYSV-init startup script. In there you’ll also find `plexmediaserver.default` (for /etc/defaults) and `plexmediaserver.service` (for /lib/systemd/system).

Do you plan to use the `preinst` and `postinst` scripting for configuration of new accounts and/or udev for /dev/dri access ?

---

<div class="post-metadata">

**Author:** ![Brick\_Frog](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/brick_frog/32/193287_2.png) [@Brick\_Frog](https://forums.plex.tv/u/Brick_Frog)\
**Post date:** [September 22, 2020, 10:55pm UTC](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689/25 "2020-09-22T22:55:10Z")

</div>

As someone with a fair amount of experience with Gentoo, there really shouldn’t be a problem in the near future. Gentoo devs, official or unofficial, have always found ways to allow installation of packages that otherwise conflict with the distro’s priorities and philosophy.

The reliance on bundled dependencies is [greatly discouraged](https://wiki.gentoo.org/wiki/Why_not_bundle_dependencies#Problems) but endured so long as it is not a hard system dependency.

[Next page](https://forums.plex.tv/t/when-will-plex-media-server-shift-to-python-3/600689.md?page=2)
