2016-09-12 2 views
2

は、私は、次のフォルダツリーでPythonパッケージを構築していたとしインストールしたディレクトリを取得する方法:のPython 3.xの - ユーザーがパッケージ

main 
|-- setup.py 
|-- the_package 
    |--globar_vars.py 
    |--the_main_script.py 

とにかくユーザーが行うが、同様に、それをインストールするには:

私はパッケージをインストールしたフォルダは、O救われることを望ん

pip install 'SomeProject' 

:PIPを使用して

sudo python setup.py install 
python setup.py install --user 
python setup.py install --prefix=/usr/local 

またはウェル、 N global_vars.pyは、任意の変数には、例:

globarl_vars.py 
#!/usr/bin/env python3 

user_installed_pkg = '/some/path/where/the/package/was/installed' 

それを得るために何らかの方法はありますか?前もって感謝します。

答えて

0
import wtv_module 
print(wtv_module.__file__) 

import os 
print(os.path.dirname(wtv_module.__file__)) 
+0

このオプションを検討していました。ただし、この方法は、パッケージがすでにインストールされている場合にのみ機能します。つまり、あなたの答えは問題の半分を解決するだけです。パッケージがインストールされているパスがわかりましたが、変数にそのパスを(すでにインストールされている)global_var.pyファイルに割り当てています。 –

+0

さて、分割している可能性があります解決策があります;) –

1

あなたSomeProjectパッケージは、(setuptoolsを使用して行うことができます)well-formed Python packageであると仮定すると、ユーザーが場所だけで、この情報を取得するためにsetuptoolsパッケージで提供さpkg_resourcesモジュールを使用を導き出すことができます。たとえば:

>>> from pkg_resources import working_set 
>>> from pkg_resources import Requirement 
>>> working_set.find(Requirement.parse('requests')) 
requests 2.2.1 (/usr/lib/python3/dist-packages) 
>>> working_set.find(Requirement.parse('requests')).location 
'/usr/lib/python3/dist-packages' 

しかし、返されるパスは、標準のファイルシステムツールを使用して直接使用パスされないことを意味卵の内側に何かである可能性があります。一般的には、Resource manager APIを使用して、そのような場合にリソースにアクセスしたいとします。

>>> import pkg_resources 
>>> api_src = pkg_resources.resource_string('requests', 'api.py') 
>>> api_src[:25] 
b'# -*- coding: utf-8 -*-\n\n'