やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

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などは一般的な英単語だったり、略名だったりする。

 こいつらの名前をすべて避けねばならない。

 ウザい。好きなように名前をつけたいのに。

 こいつらのせいでインポートするときにハマる。コレジャナイってなる。

 プログラミングの主要な作業は名付けだ。それを阻害するのはクソ言語の証である。