Что такое self в Python: примеры из реального мира
Что такое self в Python: примеры из реального мира
Вы когда-нибудь оказывались по колено в файлах Python, пытаясь импортировать модуль из родительского каталога? Если да, то вы в хорошей компании. Система импорта Python иногда может показаться извилистым лабиринтом, но не волнуйтесь, мы здесь, чтобы помочь вам сориентироваться!
Для импорта из родительского каталога в Python вы можете использовать модуль sys . Вставив требуемый каталог в список sys.path, вы сообщаете интерпретатору расположение нужного модуля. После изменения sys.path вы можете импортировать целевой модуль, используя стандартный оператор импорта.
В этой статье мы рассмотрим, как вы можете импортировать из родительских каталогов в Python. Кроме того, мы рассмотрим конкретные варианты использования импорта, которые помогут вам лучше понять базовую структуру каталогов.
Давайте погрузимся в это!
Оглавление
Как импортировать в Python
Мы собираемся перейти прямо к сегодняшней теме: импорту в Python. Те простые строки кода в начале ваших скриптов Python, которые часто начинаются с import или from ? Это ваш билет к использованию возможностей обширных библиотек и модулей Python.
В этом разделе мы рассмотрим код для импорта из родительского каталога в Python. Мы также рассмотрим возможные ошибки, которые могут возникнуть при импорте модулей из родительского каталога.
Что такое система импорта Python?
Система импорта Python обеспечивает эффективное повторное использование и организацию кода. Это упрощает поддержку сложных проектов.
Чтобы импортировать модуль или пакет в Python, вы можете использовать оператор импорта . Модули распространяются в виде пакетов, представляющих собой каталоги с набором файлов Python.
Чтобы импортировать модуль из родительского каталога, вы можете использовать модуль sys.path , чтобы добавить родительский каталог к пути Python. После добавления родительского каталога вы можете импортировать модуль с помощью оператора импорта .
Демонстрация импорта из родительского каталога
Чтобы дать вам четкую демонстрацию импорта из родительского каталога, давайте рассмотрим ряд шагов, которые помогут вам понять весь процесс.
1. Создание необходимых каталогов и файлов
Сначала откройте проводник и перейдите к нужному локальному диску. Я использую свой локальный диск E, поэтому я создам новый каталог с именем my_project .
Внутри my_project создайте другой каталог с именем module_dir .
Итак, теперь у вас должно быть:
E:
|-- /my_project
|-- /module_dir
2. Добавление файлов Python
Затем создайте новый файл .py с именем main.py в каталоге my_project .
После этого создайте еще один файл Python с именем my_module.py в 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()
В этом скрипте мы сначала выясняем местоположение каталога на один уровень выше, чем скрипт, который мы запускаем (это родительский каталог). Затем мы говорим Python также искать в этой родительской папке, когда ему нужно импортировать модули.
После этого мы импортируем модуль с именем my_module , который находится внутри каталога с именем module_dir, расположенного в этом родительском каталоге. Наконец, мы вызываем функцию с именем my_function из my_module .
После добавления приведенного выше кода сохраните и закройте файл.
4. Запуск кода
Чтобы запустить этот код, откройте терминал нужного вам редактора кода и запустите файл main.py. Если вы используете Visual Studio Code, вывод должен выглядеть следующим образом:
main.py импортирует функцию из my_module.py , как показано на изображении выше.
В этом примере подробно показано, как в Python работает файловая система и импорт из родительского каталога.
Как обрабатывать ImportError и ModuleNotFoundError в Python
Python вызовет исключение ImportError , если модуль, который вы пытаетесь импортировать, не будет найден в процессе импорта.
ImportError — это подкласс исключения ModuleNotFoundError . Он возникает, когда импортированный модуль не существует или не может быть загружен.
The following are examples of scenarios when these may occur:
The module or package is not in the sys.path.
The module or package name is misspelled or does not exist.
There is a problem with the module’s code, preventing it from being properly imported.
When encountering these errors, you could use the following solutions:
Double-checking the spelling and existence of the module or package.
Adding the necessary directory to sys.path using append() or insert().
Fixing any issues in the module’s code that may be hindering its import.
To learn more about handling errors in Python, check the following video out:
After understanding how importing works in Python, it’s also important that you gain some familiarity with Python’s directory structure.
Directory structure and importing go hand-in-hand with each other as importing requires an understanding of the directory structure, so let’s go over that in the next section.
Python Directory Structure
Understanding the Python directory structure is more than just knowing where to put your scripts or where to find that library you just installed.
It’s like having a clean, well-organized desk: you’ll know exactly where everything is, and your productivity will skyrocket, so let’s go over the basics in this section.
Package Structure
The directory structure of a Python project is essential for correct organization. If you structure your package properly, it’ll help you minimize the chance of naming conflicts. Furthermore, it’ll also enable you to easily navigate through your filesystem.
The following is a typical Python project directory structure:
project/
?
??? package1/
? ??? __init__.py
? ??? module1.py
? ??? module2.py
?
??? package2/
? ??? __init__.py
? ??? module3.py
? ??? module4.py
?
??? main.py
In the example above, project is the root directory containing two sub-packages, package1 and package2. Each package has its .py files and a unique init.py file.
What Are init.py Files?
init.py files are important for defining the package’s behavior when it’s imported. These files are executed when their parent package is imported.
The init.py files can be empty or contain initialization code. They also indicate to Python that the folder should be treated as a package.
To import a module from a parent directory, you can use the sys.path method. You’ll need to append the parent directory path to sys.path.
To demonstrate this, let’s build up on our previous example. We had the following directory structure:
E:
|-- /my_project
|-- main.py
|-- /module_dir
|-- my_module.py
Now, let’s add the init.py file to my_module directory. You can leave this file empty for now. Its presence indicates to Python that this directory should be treated as a package.
Your directory structure should now look like the following:
After adding the init.py file, you must make changes to your main.py file to instruct it to treat the module_dir folder as a package. Your main.py file should now have the following code:
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()
In this example, main.py imports the module_dir package, and then calls the function my_function() from my_module within that package.
Note the change in the call to the my_function; because we are now treating module_dir as a package, we have to include the package name when calling functions from modules within the package.
The output will be similar to the previous one. The only change we made was to treat module_dir as a package with the inclusion of init.py file.
Python Search Path
Ever wondered how Python knows where to find the modules you’re trying to import? Or maybe you’ve encountered an annoying ‘ModuleNotFoundError’ and couldn’t figure out why?
In this section, we’re going to tackle these mysteries head-on and delve into the concept of the Python search path.
The Python search path, also known as sys.path, is Python’s little roadmap to finding all the modules you need. Like a diligent scout, Python uses this path to scour your computer for modules whenever you use the import statement.
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.
Перед оператором импорта вы можете добавить путь к родительскому каталогу к 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_a.py в родительском каталоге при импорте в module_b.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. Что такое отчеты об импорте?
Вы можете импортировать файлы, модули или пакеты в Python с помощью оператора импорта
Некоторые распространенные методы импорта:
import module_name : этот метод импортирует модуль, делая все его определения доступными с помощью нотации module_name.definition_name .
import mymodule
result = mymodule.my_function(3)
from module_name import some_definition : этот метод импортирует конкретное определение из модуля, позволяя вам использовать его напрямую без префикса модуля.
from mymodule import my_function
result = my_function(3)
from module_name import * : этот метод импортирует все определения из модуля, но это не рекомендуется, так как это может привести к конфликтам имен.
Последние мысли
Понимание того, как импортировать из родительского каталога в Python, важно для поддержания организованной кодовой базы.
Эти знания позволяют вам проектировать свои проекты более модульным способом. Это также увеличивает возможность повторного использования вашего кода. Структурируя свой код в отдельные модули и пакеты, вы можете избежать повторения кода и упростить его обслуживание и обновление.
Умение использовать операторы import и from наиболее ценно, когда вы работаете над более крупными проектами, где функциональные возможности распределены по разным каталогам.
Зная, как правильно настроить путь Python для импорта модулей, вы можете получить доступ к функциям, определенным в одном каталоге, работая в другом.
Помните, что ключ к освоению Python — или любого другого языка программирования — лежит в постоянной практике и ненасытном любопытстве. Итак, продолжайте исследовать, продолжайте экспериментировать и продолжайте бросать себе вызов.
С помощью этого краткого руководства вы должны быть хорошо подготовлены к решению любых головоломок импорта, которые Python бросает вам. Но не останавливайтесь на достигнутом. Существует целая вселенная методов и приемов Python, которые ждут своего открытия!
Что такое self в Python: примеры из реального мира
Вы узнаете, как сохранять и загружать объекты из файла .rds в R. В этом блоге также рассказывается, как импортировать объекты из R в LuckyTemplates.
В этом руководстве по языку программирования DAX вы узнаете, как использовать функцию GENERATE и как динамически изменять название меры.
В этом учебном пособии рассказывается, как использовать технику многопоточных динамических визуализаций для создания аналитических сведений из динамических визуализаций данных в ваших отчетах.
В этой статье я пройдусь по контексту фильтра. Контекст фильтра — одна из основных тем, с которой должен ознакомиться любой пользователь LuckyTemplates.
Я хочу показать, как онлайн-служба LuckyTemplates Apps может помочь в управлении различными отчетами и аналитическими данными, созданными из различных источников.
Узнайте, как рассчитать изменения вашей прибыли, используя такие методы, как разветвление показателей и объединение формул DAX в LuckyTemplates.
В этом руководстве будут обсуждаться идеи материализации кэшей данных и то, как они влияют на производительность DAX при предоставлении результатов.
Если вы все еще используете Excel до сих пор, то сейчас самое подходящее время, чтобы начать использовать LuckyTemplates для своих бизнес-отчетов.
Что такое шлюз LuckyTemplates? Все, что тебе нужно знать