Sick Gaming
[Tut] Python — How to Import Modules From Another Folder? - Printable Version

+- Sick Gaming (https://www.sickgaming.net)
+-- Forum: Programming (https://www.sickgaming.net/forum-76.html)
+--- Forum: Python (https://www.sickgaming.net/forum-83.html)
+--- Thread: [Tut] Python — How to Import Modules From Another Folder? (/thread-98998.html)



[Tut] Python — How to Import Modules From Another Folder? - xSicKxBot - 12-30-2020

Python — How to Import Modules From Another Folder?

<div><p class="has-pale-cyan-blue-background-color has-background">The most Pythonic way to <strong><em>import a module from another folder </em></strong>is to place an empty file named <code>__init__.py</code> into that folder and use the <strong><em>relative path with the dot notation</em></strong>. For example, a module in the parent folder would be imported with <code>from .. import module</code>. The <code>__init__.py</code> file signals to Python that the folder should be treated as <strong><em>package</em></strong>. </p>
<p><strong>Problem</strong>: How to import a file or a module from another folder or directory in Python?</p>
<p><strong>Example</strong>: Say, you’ve given the following folder structure:</p>
<pre class="wp-block-preformatted">application ├── app │ └── folder │ └── file_1.py └── app2 └── some_folder └── file_2.py</pre>
<p>Your goal is to import functions from <code>file_1.py</code> in <code>file_2.py</code>.</p>
<h2>Method 1: sys.path.append()</h2>
<p>The first method appends the path of the <code>file_1.py</code> to the system’s path variable. </p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># file_2.py
import sys
sys.path.append('/.../application/app/folder') import file_1</pre>
<p>Note that you need to replace the first three dots in <code>'/…/application/app/folder'</code> with the concrete path to the <code>applications</code> folder. </p>
<h2>Method 2: sys.path.insert()</h2>
<p>A similar alternative is to insert the path of <code>file_1.py</code> to position 1 of the system’s path variable. This ensures that it’s loaded with higher priority and avoids some naming conflicts:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># file_2.py
import sys
sys.path.insert(1, '/.../application/app/folder') import file</pre>
<p>Again, replace the first three dots in <code>'/…/application/app/folder'</code> with the concrete path to the <code>applications</code> folder.</p>
<h2>Method 3: Dot Notation with __init__.py</h2>
<p>You can also do the following trick—creating a new package.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># file_2.py
from application.app.folder.file_1 import func_name</pre>
<p>However, you need to make sure to include an empty <code>__init__.py</code> file in the directory. This file tells Python to treat the directory as a package. It is considered to be the most Pythonic way of solving this problem. </p>
<h2>Method 4: Importlib</h2>
<p>A not-so Pythonic alternative is to use the <code>importlib</code> module:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import importlib.util
spec = importlib.util.spec_from_file_location("file_2", '/.../application/app/folder')
lib = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
lib.function()</pre>
<p><strong>References</strong></p>
<ul>
<li><a href="https://stackoverflow.com/questions/4383571/importing-files-from-different-folder" target="_blank" rel="noreferrer noopener">https://stackoverflow.com/questions/4383571/importing-files-from-different-folder</a></li>
<li><a href="https://stackoverflow.com/questions/67631/how-to-import-a-module-given-the-full-path?rq=1" target="_blank" rel="noreferrer noopener">https://stackoverflow.com/questions/67631/how-to-import-a-module-given-the-full-path?rq=1</a></li>
</ul>
<h2>Where to Go From Here?</h2>
<p>Enough theory, let’s get some practice!</p>
<p>To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?</p>
<p><strong>Practice projects is how you sharpen your saw in coding!</strong></p>
<p>Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?</p>
<p>Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.</p>
<p>Join my free webinar <a rel="noreferrer noopener" href="https://blog.finxter.com/webinar-freelancer/" target="_blank">“How to Build Your High-Income Skill Python”</a> and watch how I grew my coding business online and how you can, too—from the comfort of your own home.</p>
<p><a href="https://blog.finxter.com/webinar-freelancer/" target="_blank" rel="noreferrer noopener">Join the free webinar now!</a></p>
<p>The post <a href="https://blog.finxter.com/python-how-to-import-modules-from-another-folder/" target="_blank" rel="noopener noreferrer">Python — How to Import Modules From Another Folder?</a> first appeared on <a href="https://blog.finxter.com/" target="_blank" rel="noopener noreferrer">Finxter</a>.</p>
</div>


https://www.sickgaming.net/blog/2020/12/29/python-how-to-import-modules-from-another-folder/