550

特定の Python モジュールのソース ファイルがインストールされている場所を知るにはどうすればよいですか? Windows と Linux では方法が異なりますか?

特にモジュールのソースを探していdatetimeますが、より一般的な回答にも興味があります。

4

19 に答える 19

421

純粋な python モジュールの場合は、 を参照してソースを見つけることができますthemodule.__file__。ただし、datetime モジュールは C で記述されてdatetime.__file__いるため、.so ファイルを指しているため ( datetime.__file__Windows にはありません)、ソースを表示できません。

Python ソース tarball をダウンロードして展開すると、モジュールのコードはModulesサブディレクトリにあります。

たとえば、python 2.6 の datetime コードを見つけたい場合は、次のように表示できます。

Python-2.6/Modules/datetimemodule.c

最新の Mercurial バージョンは、Web のhttps://hg.python.org/cpython/file/tip/Modules/_datetimemodule.cでも見つけることができ ます。

于 2008-11-06T18:45:33.897 に答える
243

コマンドラインから実行python -vすると、何がどこからインポートされているかがわかります。これは、Windows と Mac OS X で動作します。

C:\>python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:\Python24\lib\site.pyc has bad mtime
import site # from C:\Python24\lib\site.py
# wrote C:\Python24\lib\site.pyc
# C:\Python24\lib\os.pyc has bad mtime
import os # from C:\Python24\lib\os.py
# wrote C:\Python24\lib\os.pyc
import nt # builtin
# C:\Python24\lib\ntpath.pyc has bad mtime
...

私のインストールでは、これらの悪い mtime が何であるかわかりません!

于 2008-11-06T18:40:27.107 に答える
137

この答えは4年遅れていると思いますが、既存の答えは誤解を招く人々です。

これを行う正しい方法は、決して__file__、またはウォークスルーsys.pathして自分自身を検索しようとすることなどです(2.1以降の下位互換性が必要な場合を除く)。

それはinspectモジュールです—特に、getfileまたはgetsourcefile

ファイルにマッピング.pycするためのルール(CPython 2.xについては文書化されていますが、苦痛であり、他の実装または3.xについてはまったく文書化されていません)を学習して実装する場合を除きます。.py.zipアーカイブ、eggs、およびモジュールパッケージの処理。サポートしていない.so/ファイルへのパスを取得するためのさまざまな方法を試します。Jython / IronPython/PyPyが何をするかを理解する。など。その場合は、それのために行きます。.pyd__file__

一方、2.0以降のすべてのPythonバージョンのソースは、オンラインで入手できますhttp://hg.python.org/cpython/file/X.Y/(たとえば、2.7または3.3)。したがって、それがまたinspect.getfile(datetime)はのようなファイルであることが.soわかっ.pydたら/usr/local/lib/python2.7/lib-dynload/datetime.so、Modulesディレクトリ内で検索できます。foo.c厳密に言えば、どのファイルがどのモジュールを定義しているかを確認する方法はありませんが、ほとんどすべてがまたはであるため、 datetimemodule.cfoomodule.cが必要なものであると推測するのは難しいことではありません。

于 2012-12-15T00:31:15.427 に答える
95

モジュールのインストールに pip を使用している場合はpip show $module、場所だけが返されます。

于 2015-09-25T14:27:58.437 に答える
78

リストには、実行時にモジュールを検索するディレクトリのsys.pathリストが含まれています。

python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]
于 2008-11-06T18:39:52.880 に答える
43

標準ライブラリからimp.find_moduleを試してください

>>> import imp
>>> imp.find_module('fontTools')
(None, 'C:\\Python27\\lib\\site-packages\\FontTools\\fontTools', ('', '', 5))
>>> imp.find_module('datetime')
(None, 'datetime', ('', '', 6))
于 2013-05-04T02:40:30.887 に答える
40

datetime組み込みモジュールなので、(Python) ソース ファイルはありません。

.py(または.pyc) ファイルからのモジュールの場合mymodule.__file__、たとえばを使用できます。

> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'
于 2008-11-06T18:41:56.853 に答える
14

シェルのエイリアシングに適した、モジュールのファイル名を取得するためのワンライナーを次に示します。

echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - 

エイリアスとして設定:

alias getpmpath="echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - "

使用するには:

$ getpmpath twisted
/usr/lib64/python2.6/site-packages/twisted/__init__.pyc
$ getpmpath twisted.web
/usr/lib64/python2.6/site-packages/twisted/web/__init__.pyc
于 2013-03-04T21:35:24.243 に答える
13

Windows では、次のように python モジュールの場所を見つけることができます: つまり、rest_framework モジュールを見つけます。 ここに画像の説明を入力

于 2014-06-09T10:04:36.157 に答える
13

Python インタープリターでは、特定のモジュールをインポートしてから、help(module) と入力できます。これにより、名前、ファイル、モジュール ドキュメント、説明などの詳細が表示されます。

元:

import os

help(os)


Help on module os:

NAME

os - OS routines for Mac, NT, or Posix depending on what system we're on.

FILE

/usr/lib/python2.6/os.py

MODULE DOCS

http://docs.python.org/library/os

DESCRIPTION

This exports:

- all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc.

- os.path is one of the modules posixpath, or ntpath

- os.name is 'posix', 'nt', 'os2', 'ce' or 'riscos'

その他

于 2011-04-21T06:39:13.180 に答える
11

code_info()Python 3.2 の新機能として、たとえばdis モジュールから 使用できるようになりました: http://docs.python.org/dev/whatsnew/3.2.html#dis

于 2011-02-23T10:56:12.723 に答える
10

この気の利いた「cdp」コマンドをチェックして、指定された Python モジュールのソースを含むディレクトリに移動します。

cdp () {
  cd "$(python -c "import os.path as _, ${1}; \
    print _.dirname(_.realpath(${1}.__file__[:-1]))"
  )"
}
于 2010-04-27T17:22:07.900 に答える
5

Ubuntu 12.04 では、たとえば python2 の numpy パッケージは次の場所にあります。

/usr/lib/python2.7/dist-packages/numpy

もちろん、これは一般的な答えではありません

于 2016-06-22T14:18:30.427 に答える
4

誰かが今それを必要とする場合に備えて答えを更新するだけで、私はPython 3.9にいて、Pipを使用してパッケージを管理しています。を使用するだけpip showです。

pip show numpy

pip が他のすべてのパッケージを保存している場所のすべての詳細が表示されます。

于 2021-06-01T13:50:15.847 に答える
1

すべての python モジュールが python で書かれているわけではありません。日時はたまたまそうでないものの1つであり、(Linuxでは)datetime.soです。

ソースコードを取得するには、Python 標準ライブラリにダウンロードする必要があります。

于 2008-11-06T18:43:03.917 に答える
1

GUI ソリューションを好む場合: Spyder (Anaconda インストールの一部) などの GUI を使用している場合は、モジュール名 (「import csv」の「csv」など) を右クリックして、「go to definition" - これによりファイルが開きますが、上部にも正確なファイルの場所が表示されます ("C:....csv.py")

于 2014-12-01T14:00:13.047 に答える