Python における Self とは: 実際の例
Python における Self とは: 実際の例
Python ファイルにどっぷりつかり、親ディレクトリからモジュールをインポートするのに苦労したことはありませんか? もしそうなら、あなたは良い仲間です。Python のインポート システムは、曲がりくねった迷路のように感じることもありますが、心配しないでください。私たちがナビゲートをお手伝いします。
Python で親ディレクトリからインポートするには、sysモジュールを使用できます。必要なディレクトリを sys.path リストに挿入すると、インタープリタに必要なモジュールの場所が提供されます。sys.path を変更した後、標準の import ステートメントを使用してターゲット モジュールをインポートできます。
この記事では、Python で親ディレクトリからインポートする方法を説明します。さらに、ディレクトリの基礎となる構造をより深く理解するのに役立つインポートの具体的な使用例を見ていきます。
さあ、始めましょう!
目次
Python でインポートする方法
早速今日のトピックである Python でのインポートに移ります。Python スクリプトの先頭にあるこれらの単純なコード行は、多くの場合importまたはfrom ?で始まります。これらは、Python の広範なライブラリとモジュールの力を活用するためのチケットです。
このセクションでは、Python で親ディレクトリからインポートするコードについて説明します。また、親ディレクトリからモジュールをインポートするときに発生する可能性のある潜在的なエラーについても説明します。
Pythonインポートシステムとは何ですか?
Python インポート システムにより、コードの効率的な再利用と編成が可能になります。これにより、複雑なプロジェクトの保守が容易になります。
Python でモジュールまたはパッケージをインポートするには、importステートメントを使用できます。モジュールは、Python ファイルのコレクションが含まれるディレクトリであるパッケージとして配布されます。
親ディレクトリからモジュールをインポートするには、sys.pathモジュールを使用して親ディレクトリを Python のパスに追加します。親ディレクトリを追加した後、 importステートメントを使用してモジュールをインポートできます。
親ディレクトリからのインポートのデモ
親ディレクトリからのインポートを明確にデモンストレーションするために、プロセス全体を理解するのに役立つ一連の手順を見てみましょう。
1. 必要なディレクトリとファイルの作成
まず、ファイル エクスプローラーを開き、目的のローカル ドライブに移動します。私はローカルの E ドライブを使用しているため、my_projectという名前の新しいディレクトリを作成します。
my_project内に、 module_dirという名前の別のディレクトリを作成します。
したがって、次のものがあるはずです。
E:
|-- /my_project
|-- /module_dir
2. Python ファイルの追加
次に、my_projectディレクトリにmain.pyという名前の新しい.pyファイルを作成します。
その後、my_module.pyという名前の別の Python ファイルをmodule_dirに作成します。
構造は次のようになっているはずです。
E:
|-- /my_project
|-- main.py
|-- /module_dir
|-- my_module.py
Visual Studio Codeを使用している場合、ディレクトリ構造は次のようになります。
3. Python ファイルの編集
my_module.pyを開き、次のコードを追加します。
def my_function():
print("Hello from my_module!")
次に、ファイルを保存して閉じます。
次に、main.pyを開いて次のコードを追加します。
import sys
import os
# Get the parent directory
parent_dir = os.path.dirname(os.path.realpath(__file__))
# Add the parent directory to sys.path
sys.path.append(parent_dir)
# Import the module from the parent directory
from module_dir import my_module
# Use a function from my_module
my_module.my_function()
このスクリプトでは、まず、実行しているスクリプトの 1 レベル上のディレクトリ (親ディレクトリ) の場所を特定します。次に、モジュールをインポートする必要があるときに、この親フォルダーも参照するように Python に指示します。
それを行った後、この親ディレクトリにあるmodule_dirというディレクトリ内にあるmy_moduleという名前のモジュールをインポートします。最後に、 my_moduleからmy_functionという名前の関数を呼び出しています。
上記のコードを追加した後、ファイルを保存して閉じます。
4. コードの実行
このコードを実行するには、目的のコード エディターのターミナルを開き、main.pyファイルを実行します。Visual Studio Code を使用している場合、出力は次のようになります。
上の画像に示すように、main.pyはmy_module.pyから関数をインポートします。
この例では、ファイル システムと親ディレクトリからのインポートが Python でどのように機能するかを詳しく示します。
Python で ImportError と ModuleNotFoundError を処理する方法
インポートしようとしているモジュールがインポート プロセス中に見つからない場合、 Python はImportError例外を発生させます。
ImportError は、 ModuleNotFoundError例外のサブクラスです。インポートされたモジュールが存在しないか、ロードできない場合に発生します。
これらが発生する可能性があるシナリオの例を次に示します。
モジュールまたはパッケージがsys.pathにありません。
モジュールまたはパッケージ名のスペルが間違っているか、存在しません。
モジュールのコードに問題があるため、正しくインポートできません。
これらのエラーが発生した場合は、次の解決策を使用できます。
モジュールまたはパッケージのスペルと存在を再確認します。
append()またはinsert()を使用して、必要なディレクトリをsys.pathに追加します。
インポートを妨げている可能性があるモジュールのコード内の問題を修正します。
Python でのエラー処理の詳細については、次のビデオをご覧ください。
Python でインポートがどのように機能するかを理解した後は、Python のディレクトリ構造にある程度慣れることも重要です。
インポートにはディレクトリ構造を理解する必要があるため、ディレクトリ構造とインポートは相互に連携して行われます。そのため、次のセクションで説明します。
Python のディレクトリ構造
Python のディレクトリ構造を理解することは、単にスクリプトを配置する場所や、インストールしたライブラリの場所を知るだけではありません。
これは、きれいに整理整頓されたデスクを持つようなものです。すべてがどこにあるかを正確に把握できるようになり、生産性が飛躍的に向上します。このセクションでは、基本的な事項を見ていきましょう。
パッケージ構造
Python プロジェクトのディレクトリ構造は、正しく構成するために不可欠です。パッケージを適切に構造化すれば、名前の競合の可能性を最小限に抑えることができます。さらに、ファイルシステム内を簡単に移動できるようになります。
以下は、典型的な Python プロジェクトのディレクトリ構造です。
project/
?
??? package1/
? ??? __init__.py
? ??? module1.py
? ??? module2.py
?
??? package2/
? ??? __init__.py
? ??? module3.py
? ??? module4.py
?
??? main.py
上の例では、project は2 つのサブパッケージpackage1とpackage2を含むルート ディレクトリです。各パッケージには、.pyファイルと固有のinit.pyファイルがあります。
init.py ファイルとは何ですか?
init.pyファイルは、インポート時のパッケージの動作を定義するために重要です。これらのファイルは、親パッケージがインポートされるときに実行されます。
init.pyファイルは空の場合もあれば、初期化コードが含まれている場合もあります。また、フォルダーをパッケージとして扱う必要があることも Python に示します。
親ディレクトリからモジュールをインポートするには、 sys.pathメソッドを使用できます。親ディレクトリのパスをsys.pathに追加する必要があります。
これを実証するために、前の例をさらに進めてみましょう。次のディレクトリ構造がありました。
E:
|-- /my_project
|-- main.py
|-- /module_dir
|-- my_module.py
ここで、 init.pyファイルをmy_moduleディレクトリに追加しましょう。現時点では、このファイルを空のままにしておくことができます。このディレクトリの存在は、Python に対して、このディレクトリをパッケージとして扱う必要があることを示します。
ディレクトリ構造は次のようになります。
init.pyファイルを追加した後、 main.pyファイルを変更して、module_dirフォルダーをパッケージとして扱うように指示する必要があります。main.pyファイルには次のコードが含まれているはずです。
import sys
import os
# Get the parent directory
parent_dir = os.path.dirname(os.path.realpath(__file__))
# Add the parent directory to sys.path
sys.path.append(parent_dir)
# Import my_module from the package module_dir
import module_dir
# Call my_function from my_module
my_module.my_function()
この例では、main.py はmodule_dirパッケージをインポートし、そのパッケージ内の my_module から関数my_function()を呼び出します。
my_functionの呼び出しの変更に注意してください。module_dir をパッケージとして扱うようになったので、パッケージ内のモジュールから関数を呼び出すときにパッケージ名を含める必要があります。
出力は前の出力と同様になります。私たちが行った唯一の変更は、 init.pyファイルを含むパッケージとしてmodule_dirを扱うことです。
Python 検索パス
インポートしようとしているモジュールの場所を Python がどのようにして知るのか疑問に思ったことはありませんか? あるいは、迷惑な「ModuleNotFoundError」に遭遇したものの、その理由が分からなかったのではないでしょうか?
このセクションでは、これらの謎に正面から取り組み、Python 検索パスの概念を詳しく掘り下げていきます。
Python 検索パス ( sys.pathとも呼ばれます) は、必要なすべてのモジュールを見つけるための Python の小さなロードマップです。Python は、import ステートメントを使用するたびに、熱心に偵察するように、このパスを使用してコンピューターのモジュールを探します。
Understanding how it works can save you from headaches and help you troubleshoot when things go awry, so let’s go over some basics!
1. What is the sys.path List in Python?
The sys.path list is a crucial component when importing modules in a directory. It’s a list of strings that represents the module search path.
Each string in the list is a directory location where Python looks for modules (*.py files) or packages (folders containing init.py files).
The following example shows you how to view your current sys.path list:
import sys
for path in sys.path:
print(path)
After running the above code, you’ll see an output like the following:
You can also add new directories to the sys.path list so that Python finds your custom modules.
For instance:
import sys
sys.path.append('/path/to/new/module/directory')
2. What are PythonPath Environment Variables?
Another way you can manage the module search path is by using the PYTHONPATH environment variable.
PYTHON PATH is a string containing a list of directories that is appended to the default sys.path list. This means you can add directories to PYTHONPATH. This allows Python to search for modules in those directories when importing.
Setting the PYTHONPATH environment variable depends on your operating system:
Unix-based systems (Linux, macOS): You can use the export command in your terminal or add the following line to your shell configuration file (.bashrc, .zshrc or similar):
export PYTHONPATH="/path/to/module/directory1:/path/to/module/directory2"
Windows OS: Go to System Properties > Environment Variables, and under User variables, click New to create a new variable with the name: “PYTHONPATH” and the value as a list of directory paths separated by a semi-colon (;).
C:pathtomoduledirectory1;C:pathtomoduledirectory2
Once the path variable is set, you can run your Python script. It will search for imported modules in those directories as well as the default ones in sys.path.
When organizing your code into files and folders, you’ll frequently come across relative imports and adjusting sys.path.
In the next section, we’ll explore both and see how they fit into the framework for Python imports.
Parent Directory Imports
You can organize code into different folders and files to improve both readability and maintainability. However, importing modules from parent directories can be a bit tricky.
In this section, we’ll discuss two approaches to achieve this:
Relative Imports
Adjusting sys.path
1. Relative Imports
Relative imports allow you to import modules based on their relative position in the directory hierarchy.
You can use the dot (.) notation to refer to the current directory or double dot (..) notation to refer to the parent directory.
Suppose you have a directory structure like the following:
parent_directory/
?
??? module_a.py
?
??? sibling_directory/
??? module_b.py
Inside module_b.py, you can use relative imports to access module_a.py:
from .. import module_a
The double dot refers to the parent directory. It is important to note that relative imports only work if the parent directory is a package (has an init.py file).
2. Adjusting sys.path
You can also import modules from a parent directory by modifying the sys.path.
importステートメントの前に、親ディレクトリのパスをsys.pathに追加できます。まず、 sysモジュールをインポートする必要があります。次に、osモジュールを使用して親ディレクトリのパスを取得します。
次のようなディレクトリ構造があるとします。
project_root/
?
??? parent_directory/
? ??? module_a.py
?
??? current_directory/
??? module_b.py
module_b.pyでは、次のように親ディレクトリのパスをsys.pathに追加できます。
import os
import sys
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(parent_dir)
import module_a
これで、Python はmodule_b.pyにインポートするときに親ディレクトリでmodule_a.pyを検索します。
相対インポート アプローチまたはsys.pathアプローチのいずれかを使用して、親ディレクトリからモジュールをインポートできます。
モジュールとパッケージの使用方法
Python では、モジュールとパッケージはコードを整理して再利用するための方法です。これらを使用すると、複雑なプロジェクトを管理しやすい部分に分割できます。
このセクションでは、 Pythonでモジュールとパッケージを操作する方法について説明します。次のような主要な概念も含めます。
名前空間
変数と定義
インポートステートメント
1. 名前空間とは何ですか?
Python の名前空間は、変数、関数、クラスの名前が異なるモジュール間で競合しないようにする方法です。
Python には、次のようなさまざまなレベルの名前空間があります。
グローバル名前空間:モジュール全体の名前空間を指します。
ローカル名前空間:関数またはクラス内の名前空間を指します。
namespace[name]表記を使用して、特定の名前空間内の名前を取得できます。
2. 変数と定義とは何ですか?
Python スクリプトでは、変数、関数、クラスを定義できます。これらの定義は、スクリプトの名前空間に保存されます。
スクリプトをパッケージとしてインポートすると、プロジェクトの他の部分でその定義にアクセスして再利用できます。
以下は、同じ名前空間で変数と関数を定義する方法の例です。
# my_variable.py
my_variable = 5
def my_function(x):
return x + my_variable
このモジュールには変数my_variableと関数my_function があります。
このコードを実行するには、次に示すように、 my_variable.pyという名前の新しいファイルを作成し、そこにコードを配置します。
これで、以下に示すように、このファイルをインポートして別のスクリプトで使用できるようになります。
main.pyファイルを実行すると、次のような出力が得られます。
3.インポートステートメントとは何ですか?
importステートメントを使用して、Python でファイル、モジュール、またはパッケージをインポートできます。
一般的なインポート方法には次のようなものがあります。
import module_name : このメソッドはモジュールをインポートし、そのすべての定義にmodule_name.diction_name表記でアクセスできるようにします。
import mymodule
result = mymodule.my_function(3)
from module_name import some_setting : このメソッドはモジュールから特定の定義をインポートし、モジュール接頭辞なしでそれを直接使用できるようにします。
from mymodule import my_function
result = my_function(3)
from module_name import * : このメソッドはモジュールからすべての定義をインポートしますが、名前の競合が発生する可能性があるためお勧めできません。
最終的な考え
Python で親ディレクトリからインポートする方法を理解することは、体系化されたコードベースを維持する上で重要です。
この知識により、よりモジュール的な方法でプロジェクトを設計できるようになります。また、コードの再利用性も高まります。コードを個別のモジュールとパッケージに構造化することで、コードの繰り返しを回避し、保守と更新が容易になります。
import ステートメントとfromステートメントを使用するスキルは、機能が異なるディレクトリに分割されている大規模なプロジェクトに取り組んでいる場合に最も役立ちます。
Python のパスを正しく調整してモジュールをインポートする方法を知ることで、あるディレクトリで作業しながら、あるディレクトリで定義された機能にアクセスできます。
Python (または他のプログラミング言語) をマスターする鍵は、一貫した練習と飽くなき好奇心にあることを忘れないでください。したがって、探索を続け、実験を続け、自分自身に挑戦し続けてください。
このクイック ガイドを読めば、Python が投げかけるインポートのパズルに対処するための十分な準備が整っているはずです。しかし、ここで立ち止まらないでください。Python のテクニックやトリックは世界中にたくさんあり、発見されるのを待っています。
Python における Self とは: 実際の例
R の .rds ファイルからオブジェクトを保存および読み込む方法を学習します。このブログでは、R から LuckyTemplates にオブジェクトをインポートする方法についても説明します。
この DAX コーディング言語チュートリアルでは、GENERATE 関数の使用方法とメジャー タイトルを動的に変更する方法を学びます。
このチュートリアルでは、マルチスレッド動的ビジュアル手法を使用して、レポート内の動的データ視覚化から洞察を作成する方法について説明します。
この記事では、フィルター コンテキストについて説明します。フィルター コンテキストは、LuckyTemplates ユーザーが最初に学習する必要がある主要なトピックの 1 つです。
LuckyTemplates Apps オンライン サービスが、さまざまなソースから生成されたさまざまなレポートや分析情報の管理にどのように役立つかを示したいと思います。
LuckyTemplates でのメジャー分岐や DAX 数式の結合などの手法を使用して、利益率の変化を計算する方法を学びます。
このチュートリアルでは、データ キャッシュの具体化のアイデアと、それが結果を提供する際の DAX のパフォーマンスにどのように影響するかについて説明します。
これまで Excel を使用している場合は、ビジネス レポートのニーズに合わせて LuckyTemplates の使用を開始するのに最適な時期です。
LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて