Pythonで名前重複する戦犯どもを網羅した(204個)
Pythonは名前重複がよく起きるクソ言語である。標準ライブラリのファイル名と被ったら自作モジュールをインポートできないクソ仕様だ。そこで、どれだけの名前が汚染されているか調べた。
手順
python3
のパスを調べる。
python3 -c 'import sys; print(sys.path);'
['', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/home/pi/.local/lib/python3.7/site-packages', '/usr/local/lib/python3.7/dist-packages', '/usr/lib/python3/dist-packages']
標準ライブラリがあるパスへ移動する。
cd /usr/lib/python3.7/
ファイル数を調べる。204
だった。つまり名前重複する候補が204
個もある。
$ ls -1 | wc -l
204
ファイル名を網羅する。
ls -1
LICENSE.txt __future__.py __phello__.foo.py __pycache__ _bootlocale.py _collections_abc.py _compat_pickle.py _compression.py _dummy_thread.py _markupbase.py _osx_support.py _py_abc.py _pydecimal.py _pyio.py _sitebuiltins.py _strptime.py _sysconfigdata_m_linux_arm-linux-gnueabihf.py _threading_local.py _weakrefset.py abc.py aifc.py antigravity.py argparse.py ast.py asynchat.py asyncio asyncore.py base64.py bdb.py binhex.py bisect.py bz2.py cProfile.py calendar.py cgi.py cgitb.py chunk.py cmd.py code.py codecs.py codeop.py collections colorsys.py compileall.py concurrent config-3.7m-arm-linux-gnueabihf configparser.py contextlib.py contextvars.py copy.py copyreg.py crypt.py csv.py ctypes curses dataclasses.py datetime.py dbm decimal.py difflib.py dis.py distutils doctest.py dummy_threading.py email encodings ensurepip enum.py filecmp.py fileinput.py fnmatch.py formatter.py fractions.py ftplib.py functools.py genericpath.py getopt.py getpass.py gettext.py glob.py gzip.py hashlib.py heapq.py hmac.py html http imaplib.py imghdr.py imp.py importlib inspect.py io.py ipaddress.py json keyword.py lib-dynload lib2to3 linecache.py locale.py logging lzma.py macpath.py mailbox.py mailcap.py mimetypes.py modulefinder.py multiprocessing netrc.py nntplib.py ntpath.py nturl2path.py numbers.py opcode.py operator.py optparse.py os.py pathlib.py pdb.py pickle.py pickletools.py pipes.py pkgutil.py platform.py plistlib.py poplib.py posixpath.py pprint.py profile.py pstats.py pty.py py_compile.py pyclbr.py pydoc.py pydoc_data queue.py quopri.py random.py re.py reprlib.py rlcompleter.py runpy.py sched.py secrets.py selectors.py shelve.py shlex.py shutil.py signal.py site.py sitecustomize.py smtpd.py smtplib.py sndhdr.py socket.py socketserver.py sqlite3 sre_compile.py sre_constants.py sre_parse.py ssl.py stat.py statistics.py string.py stringprep.py struct.py subprocess.py sunau.py symbol.py symtable.py sysconfig.py tabnanny.py tarfile.py telnetlib.py tempfile.py test textwrap.py this.py threading.py timeit.py tkinter token.py tokenize.py trace.py traceback.py tracemalloc.py tty.py turtle.py types.py typing.py unittest urllib uu.py uuid.py venv warnings.py wave.py weakref.py webbrowser.py wsgiref xdrlib.py xml xmlrpc zipapp.py zipfile.py
ふつうに重複しそうな名前がけっこうある。たとえば以下。
abc.py
cmd.py
code.py
collections
copy.py
csv.py
html
http
io.py
test
token.py
trace.py
wave.py
xml
abc
とか、とりあえず適当なファイル名で書いてみたときとかに名前重複しそう。
cmd
, code
, collections
などは一般的な英単語だったり、略名だったりする。
こいつらの名前をすべて避けねばならない。
ウザい。好きなように名前をつけたいのに。
こいつらのせいでインポートするときにハマる。コレジャナイってなる。
プログラミングの主要な作業は名付けだ。それを阻害するのはクソ言語の証である。