Skip to main content

relative path from the python file itself

Project description

relpath

!!! このドキュメントは書きかけです。 !!! This document is a work in progress.

下の方に日本語・●・●の説明があります

概要 (日本語)

このパッケージでできること:

  1. 直感的な相対パス参照ができる
    • pythonのパス参照の仕様は直感に反する
  2. モジュールの相対importに使える
    • フォルダが多重で複雑なプロジェクトにも対応できる

使い方1: 基本的な例

下記は、pythonファイル自身の場所(ディレクトリ)を取得する例です。

import relpath as rp
print(rp.rel2abs("./"))	# -> "(このpythonファイルが存在するディレクトリ)"

使い方2: 実用的な例

このツールは、下記のような場合に真価を発揮します。

.
`-- project_folder
    |-- parts
    |   |-- data.txt
    |   `-- script_B.py
    `-- script_A.py

上記のように、複数のpythonファイルからなるプロジェクトを考えます。 script_A.pyの中では下記のように、script_B.pyを利用します。

# script_A.py

# load script_B.py
from parts.script_B import get_data

print(get_data())

この場合に、下記のコード例のように、 script_B.pyから"./data.txt"を相対的に読み込もうとすると失敗します。^1

# script_B.py

def get_data():
    with open("./data.txt", "r") as f:  # -> FileNotFoundError: [Errno 2] No such file or directory: './data.txt'
        return f.read()

そこで、relpathパッケージを使って下記のように書くと、 "./data.txt"を相対的に読み込めるようになります。^2

# script_B.py

from relpath import rel2abs

def get_data():
    with open(rel2abs("./data.txt"), "r") as f:  # -> NO ERROR!!
        return f.read()

使い方3: 相対importとしての利用

relpathパッケージを利用すると、下記の例のように、 モジュールの直感的な相対importを実現できます。

from relpath import add_import_path
add_import_path("../")

from my_module import some_function

some_function()

上記の例を見ると、単にsys.path.append("../")としても動作するように思われます。 しかし、プロジェクトフォルダの階層構造が複雑で、1つのモジュールが別々の場所から使われるような場合には、sys.path.append("../")では対応できないことがあります。 そのため、相対importを実現したいときは、常にrelpathパッケージのadd_import_pathを利用することを推奨します。

なお、add_import_path("../") は、内部的にはsys.path.append(rel2abs("../"))と等価です。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

relpath-2.78.tar.gz (3.5 kB view hashes)

Uploaded Source

Built Distribution

relpath-2.78-py3-none-any.whl (3.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page