2016-06-15 43 views
8

"pip freeze"では、パッケージ名のリストを取得します。例:Pythonの実際のインポート名のリスト

Django==1.9.7 
psycopg2==2.6.1 
djangorestframework==3.3.3 
djangorestframework-jwt==1.8.0 
django-rest-swagger==0.3.7 
django-environ==0.4.0 
python-dateutil==2.5.3 
django-sendfile==0.3.10 

importに実際の名前のリストを受け取る方法はありますか?例えば代わりのdjangorestframework =>rest_framework

+0

'ピップlist'をお試しください。これはあなたが探しているかもしれません。 –

+3

@RahulKPはあなたにパッケージ名を与えますが、必ずしもあなたが 'import'するものではありません。 – jonrsharpe

+0

C:\ Python27 \ Lib \ site-packages(windows)に格納されている実際のモジュールの名前ではありませんか? –

答えて

3

はい、top_level.txtが正しいモジュールになります名。 pkg_resourcesモジュールを使用すると、パッケージからメタデータを抽出できます。このため

Pythonコード:

import pkg_resources 


def read_requirements(requirements_file): 
    with open(requirements_file, 'r') as f: 
     return f.read().splitlines() 


def get_package_name(package): 
    return list(pkg_resources.get_distribution(package)._get_metadata('top_level.txt'))[0] 


requirements = read_requirements('/path/to/requirements.txt') 
packages = [get_package_name(p) for p in requirements] 
6
あなたは、このようなトップレベルのインポートのリストを取得するには、標準 pkgutilモジュールを使用することができ

:のみ通常ファイルに住んモジュール、zipファイルを検索します

import pkgutil 
list(pkgutil.iter_modules()) 

かモジュールのenumrationをサポートする別のローダー。それらのほとんどは標準システムでなければなりません。

結果は、ローダ、モジュール名、および単一モジュールかパッケージの3タプルのリストです。あなたが唯一のモジュール名に興味がある場合は、単純に実行します。

list(item[1] for item in pkgutil.iter_modules()) 
1

を別の方法は、このファイルの最初の行を見ることである。

# If output of pip freeze is djangorestframework==3.3.3 
# Then your dir prefix becomes "djangorestframework-3.3.3" 

../lib/python2.7/site-packages/<dir-prefix>.dist-info/top_level.txt 

# e.g. 
../lib/python2.7/site-packages/djangorestframework-3.3.3.dist-info/top_level.txt 
関連する問題