私の知る限り、VeryHighLevelレイヤーからこれを行うことはできません。(試したことはありPyRun_SimpleFileExFlags
ますか?)では、ImportingModulesAPIを確認します。
インポートしようとしているだけの場合foo
、または同等のimportlib風の処理を実行しようとしている場合は、それがそうであるかどうかを気にせずにfoo.py
、foo.pyc
それほど難しくはありません。ただし、インポートの通常のルールを回避し、パス名でファイルを明示的に指定しようとしている場合は、それが可能である必要がありますが、それを行う方法は考えられません。ただし、次の場合を除きます。
.pycファイルは、内部では、からのマジックナンバー、PyImport_GetMagicNumber()
無視できる4バイトのタイムスタンプ、marshal.loads
PythonまたはPyMarshal_ReadObjectFromString
Cからのマーシャリングされたコードオブジェクトです。
私はこれをCからではなく、Pythonからテストしました。
>>> with open('foo.pyc', 'rb') as f:
... data = f.read()
>>> code = marshal.loads(data[8:])
>>> code
<code object <module> at 0x110118730, file "foo.py", line 1>
そしてそれを調べると、それはまさにそれが本来あるべき姿であるように思われます。