-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathimporting-modules.html
More file actions
229 lines (184 loc) · 62.6 KB
/
importing-modules.html
File metadata and controls
229 lines (184 loc) · 62.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Python - Importing modules</title>
<meta name="generator" content="VuePress 1.8.2">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
<meta name="description" content="The __all__ special variable, Importing a module, Import modules from an arbitrary filesystem location, Importing all names from a module, Programmatic importing, PEP8 rules for Imports, Importing specific names from a module, Importing submodules, __import__() function, Re-importing a module">
<meta property="og:site_name" content="DevTut">
<meta property="og:title" content="Python - Importing modules">
<meta property="og:description" content="The __all__ special variable, Importing a module, Import modules from an arbitrary filesystem location, Importing all names from a module, Programmatic importing, PEP8 rules for Imports, Importing specific names from a module, Importing submodules, __import__() function, Re-importing a module">
<meta property="og:type" content="article">
<meta property="og:url" content="/python/importing-modules.html">
<meta property="og:image" content="/logo.png">
<meta name="twitter:title" content="Python - Importing modules">
<meta name="twitter:description" content="The __all__ special variable, Importing a module, Import modules from an arbitrary filesystem location, Importing all names from a module, Programmatic importing, PEP8 rules for Imports, Importing specific names from a module, Importing submodules, __import__() function, Re-importing a module">
<meta name="twitter:url" content="/python/importing-modules.html">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="/logo.png">
<meta name="theme-color" content="#ffffff">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="msapplication-TileImage" content="/mstile-150x150.png">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="google-site-verification" content="76_rKXgwMVIjd-axJC_1zPV9OS4mEjvtgjYOWVkAdnQ">
<link rel="preload" href="/assets/css/0.styles.60619e34.css" as="style"><link rel="preload" href="/assets/js/app.1779e102.js" as="script"><link rel="preload" href="/assets/js/3.2cfa8016.js" as="script"><link rel="preload" href="/assets/js/2723.6c1bf32e.js" as="script">
<link rel="stylesheet" href="/assets/css/0.styles.60619e34.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">DevTut</span></a> <div class="links"><form id="search-form" role="search" class="algolia-search-wrapper search-box"><input id="algolia-search-input" class="search-query"></form> <nav class="nav-links can-hide"> <a href="https://github.com/devtut/generate" target="_blank" rel="noopener noreferrer" class="repo-link">
GitHub
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"> <a href="https://github.com/devtut/generate" target="_blank" rel="noopener noreferrer" class="repo-link">
GitHub
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>Python</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/python/" aria-current="page" class="sidebar-link">Disclaimer</a></li><li><a href="/python/getting-started-with-python-language.html" class="sidebar-link">Getting started with Python Language</a></li><li><a href="/python/python-data-types.html" class="sidebar-link">Python Data Types</a></li><li><a href="/python/indentation.html" class="sidebar-link">Indentation</a></li><li><a href="/python/comments-and-documentation.html" class="sidebar-link">Comments and Documentation</a></li><li><a href="/python/date-and-time.html" class="sidebar-link">Date and Time</a></li><li><a href="/python/enum.html" class="sidebar-link">Enum</a></li><li><a href="/python/set.html" class="sidebar-link">Set</a></li><li><a href="/python/simple-mathematical-operators.html" class="sidebar-link">Simple Mathematical Operators</a></li><li><a href="/python/bitwise-operators.html" class="sidebar-link">Bitwise Operators</a></li><li><a href="/python/boolean-operators.html" class="sidebar-link">Boolean Operators</a></li><li><a href="/python/operator-precedence.html" class="sidebar-link">Operator Precedence</a></li><li><a href="/python/variable-scope-and-binding.html" class="sidebar-link">Variable Scope and Binding</a></li><li><a href="/python/conditionals.html" class="sidebar-link">Conditionals</a></li><li><a href="/python/comparisons.html" class="sidebar-link">Comparisons</a></li><li><a href="/python/loops.html" class="sidebar-link">Loops</a></li><li><a href="/python/arrays.html" class="sidebar-link">Arrays</a></li><li><a href="/python/multidimensional-arrays.html" class="sidebar-link">Multidimensional arrays</a></li><li><a href="/python/dictionary.html" class="sidebar-link">Dictionary</a></li><li><a href="/python/list.html" class="sidebar-link">List</a></li><li><a href="/python/list-comprehensions.html" class="sidebar-link">List Comprehensions</a></li><li><a href="/python/list-slicing-selecting-parts-of-lists.html" class="sidebar-link">List slicing (selecting parts of lists)</a></li><li><a href="/python/groupby.html" class="sidebar-link">groupby()</a></li><li><a href="/python/linked-lists.html" class="sidebar-link">Linked lists</a></li><li><a href="/python/linked-list-node.html" class="sidebar-link">Linked List Node</a></li><li><a href="/python/filter.html" class="sidebar-link">Filter</a></li><li><a href="/python/heapq.html" class="sidebar-link">Heapq</a></li><li><a href="/python/tuple.html" class="sidebar-link">Tuple</a></li><li><a href="/python/basic-input-and-output.html" class="sidebar-link">Basic Input and Output</a></li><li><a href="/python/files-folders-i-o.html" class="sidebar-link">Files & Folders I/O</a></li><li><a href="/python/os-path.html" class="sidebar-link">os.path</a></li><li><a href="/python/iterables-and-iterators.html" class="sidebar-link">Iterables and Iterators</a></li><li><a href="/python/functions.html" class="sidebar-link">Functions</a></li><li><a href="/python/defining-functions-with-list-arguments.html" class="sidebar-link">Defining functions with list arguments</a></li><li><a href="/python/functional-programming-in-python.html" class="sidebar-link">Functional Programming in Python</a></li><li><a href="/python/partial-functions.html" class="sidebar-link">Partial functions</a></li><li><a href="/python/decorators.html" class="sidebar-link">Decorators</a></li><li><a href="/python/classes.html" class="sidebar-link">Classes</a></li><li><a href="/python/metaclasses.html" class="sidebar-link">Metaclasses</a></li><li><a href="/python/string-formatting.html" class="sidebar-link">String Formatting</a></li><li><a href="/python/string-methods.html" class="sidebar-link">String Methods</a></li><li><a href="/python/using-loops-within-functions.html" class="sidebar-link">Using loops within functions</a></li><li><a href="/python/importing-modules.html" aria-current="page" class="active sidebar-link">Importing modules</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/python/importing-modules.html#the-all-special-variable" class="sidebar-link">The _all_ special variable</a></li><li class="sidebar-sub-header"><a href="/python/importing-modules.html#importing-a-module" class="sidebar-link">Importing a module</a></li><li class="sidebar-sub-header"><a href="/python/importing-modules.html#import-modules-from-an-arbitrary-filesystem-location" class="sidebar-link">Import modules from an arbitrary filesystem location</a></li><li class="sidebar-sub-header"><a href="/python/importing-modules.html#importing-all-names-from-a-module" class="sidebar-link">Importing all names from a module</a></li><li class="sidebar-sub-header"><a href="/python/importing-modules.html#programmatic-importing" class="sidebar-link">Programmatic importing</a></li><li class="sidebar-sub-header"><a href="/python/importing-modules.html#pep8-rules-for-imports" class="sidebar-link">PEP8 rules for Imports</a></li><li class="sidebar-sub-header"><a href="/python/importing-modules.html#importing-specific-names-from-a-module" class="sidebar-link">Importing specific names from a module</a></li><li class="sidebar-sub-header"><a href="/python/importing-modules.html#importing-submodules" class="sidebar-link">Importing submodules</a></li><li class="sidebar-sub-header"><a href="/python/importing-modules.html#import-function" class="sidebar-link">_import_() function</a></li><li class="sidebar-sub-header"><a href="/python/importing-modules.html#re-importing-a-module" class="sidebar-link">Re-importing a module</a></li></ul></li><li><a href="/python/difference-between-module-and-package.html" class="sidebar-link">Difference between Module and Package</a></li><li><a href="/python/math-module.html" class="sidebar-link">Math Module</a></li><li><a href="/python/complex-math.html" class="sidebar-link">Complex math</a></li><li><a href="/python/collections-module.html" class="sidebar-link">Collections module</a></li><li><a href="/python/operator-module.html" class="sidebar-link">Operator module</a></li><li><a href="/python/json-module.html" class="sidebar-link">JSON Module</a></li><li><a href="/python/sqlite3-module.html" class="sidebar-link">Sqlite3 Module</a></li><li><a href="/python/the-os-module.html" class="sidebar-link">The os Module</a></li><li><a href="/python/the-locale-module.html" class="sidebar-link">The locale Module</a></li><li><a href="/python/itertools-module.html" class="sidebar-link">Itertools Module</a></li><li><a href="/python/asyncio-module.html" class="sidebar-link">Asyncio Module</a></li><li><a href="/python/random-module.html" class="sidebar-link">Random module</a></li><li><a href="/python/functools-module.html" class="sidebar-link">Functools Module</a></li><li><a href="/python/the-dis-module.html" class="sidebar-link">The dis module</a></li><li><a href="/python/the-base64-module.html" class="sidebar-link">The base64 Module</a></li><li><a href="/python/queue-module.html" class="sidebar-link">Queue Module</a></li><li><a href="/python/deque-module.html" class="sidebar-link">Deque Module</a></li><li><a href="/python/webbrowser-module.html" class="sidebar-link">Webbrowser Module</a></li><li><a href="/python/tkinter.html" class="sidebar-link">tkinter</a></li><li><a href="/python/pyautogui-module.html" class="sidebar-link">pyautogui module</a></li><li><a href="/python/indexing-and-slicing.html" class="sidebar-link">Indexing and Slicing</a></li><li><a href="/python/plotting-with-matplotlib.html" class="sidebar-link">Plotting with Matplotlib</a></li><li><a href="/python/graph-tool.html" class="sidebar-link">graph-tool</a></li><li><a href="/python/generators.html" class="sidebar-link">Generators</a></li><li><a href="/python/reduce.html" class="sidebar-link">Reduce</a></li><li><a href="/python/map-function.html" class="sidebar-link">Map Function</a></li><li><a href="/python/exponentiation.html" class="sidebar-link">Exponentiation</a></li><li><a href="/python/searching.html" class="sidebar-link">Searching</a></li><li><a href="/python/sorting-minimum-and-maximum.html" class="sidebar-link">Sorting, Minimum and Maximum</a></li><li><a href="/python/counting.html" class="sidebar-link">Counting</a></li><li><a href="/python/the-print-function.html" class="sidebar-link">The Print Function</a></li><li><a href="/python/regular-expressions-regex.html" class="sidebar-link">Regular Expressions (Regex)</a></li><li><a href="/python/copying-data.html" class="sidebar-link">Copying data</a></li><li><a href="/python/context-managers-with-statement.html" class="sidebar-link">Context Managers (“with” Statement)</a></li><li><a href="/python/the-name-special-variable.html" class="sidebar-link">The _name_ special variable</a></li><li><a href="/python/checking-path-existence-and-permissions.html" class="sidebar-link">Checking Path Existence and Permissions</a></li><li><a href="/python/creating-python-packages.html" class="sidebar-link">Creating Python packages</a></li><li><a href="/python/usage-of-pip-module-pypi-package-manager.html" class="sidebar-link">Usage of "pip" module: PyPI Package Manager</a></li><li><a href="/python/pip-pypi-package-manager.html" class="sidebar-link">pip: PyPI Package Manager</a></li><li><a href="/python/parsing-command-line-arguments.html" class="sidebar-link">Parsing Command Line arguments</a></li><li><a href="/python/subprocess-library.html" class="sidebar-link">Subprocess Library</a></li><li><a href="/python/setup-py.html" class="sidebar-link">setup.py</a></li><li><a href="/python/recursion.html" class="sidebar-link">Recursion</a></li><li><a href="/python/type-hints.html" class="sidebar-link">Type Hints</a></li><li><a href="/python/exceptions.html" class="sidebar-link">Exceptions</a></li><li><a href="/python/raise-custom-errors-exceptions.html" class="sidebar-link">Raise Custom Errors / Exceptions</a></li><li><a href="/python/commonwealth-exceptions.html" class="sidebar-link">Commonwealth Exceptions</a></li><li><a href="/python/urllib.html" class="sidebar-link">urllib</a></li><li><a href="/python/web-scraping-with-python.html" class="sidebar-link">Web scraping with Python</a></li><li><a href="/python/html-parsing.html" class="sidebar-link">HTML Parsing</a></li><li><a href="/python/manipulating-xml.html" class="sidebar-link">Manipulating XML</a></li><li><a href="/python/python-requests-post.html" class="sidebar-link">Python Requests Post</a></li><li><a href="/python/distribution.html" class="sidebar-link">Distribution</a></li><li><a href="/python/property-objects.html" class="sidebar-link">Property Objects</a></li><li><a href="/python/overloading.html" class="sidebar-link">Overloading</a></li><li><a href="/python/polymorphism.html" class="sidebar-link">Polymorphism</a></li><li><a href="/python/method-overriding.html" class="sidebar-link">Method Overriding</a></li><li><a href="/python/user-defined-methods.html" class="sidebar-link">User-Defined Methods</a></li><li><a href="/python/string-representations-of-class-instances-str-and-repr-methods.html" class="sidebar-link">String representations of class instances: _str and repr_ methods</a></li><li><a href="/python/debugging.html" class="sidebar-link">Debugging</a></li><li><a href="/python/reading-and-writing-csv.html" class="sidebar-link">Reading and Writing CSV</a></li><li><a href="/python/writing-to-csv-from-string-or-list.html" class="sidebar-link">Writing to CSV from String or List</a></li><li><a href="/python/dynamic-code-execution-with-exec-and-eval.html" class="sidebar-link">Dynamic code execution with exec and eval</a></li><li><a href="/python/pyinstaller-distributing-python-code.html" class="sidebar-link">PyInstaller - Distributing Python Code</a></li><li><a href="/python/data-visualization-with-python.html" class="sidebar-link">Data Visualization with Python</a></li><li><a href="/python/the-interpreter-command-line-console.html" class="sidebar-link">The Interpreter (Command Line Console)</a></li><li><a href="/python/args-and-kwargs.html" class="sidebar-link">args and *kwargs</a></li><li><a href="/python/garbage-collection.html" class="sidebar-link">Garbage Collection</a></li><li><a href="/python/pickle-data-serialisation.html" class="sidebar-link">Pickle data serialisation</a></li><li><a href="/python/binary-data.html" class="sidebar-link">Binary Data</a></li><li><a href="/python/idioms.html" class="sidebar-link">Idioms</a></li><li><a href="/python/data-serialization.html" class="sidebar-link">Data Serialization</a></li><li><a href="/python/multiprocessing.html" class="sidebar-link">Multiprocessing</a></li><li><a href="/python/multithreading.html" class="sidebar-link">Multithreading</a></li><li><a href="/python/processes-and-threads.html" class="sidebar-link">Processes and Threads</a></li><li><a href="/python/python-concurrency.html" class="sidebar-link">Python concurrency</a></li><li><a href="/python/parallel-computation.html" class="sidebar-link">Parallel computation</a></li><li><a href="/python/sockets.html" class="sidebar-link">Sockets</a></li><li><a href="/python/websockets.html" class="sidebar-link">Websockets</a></li><li><a href="/python/sockets-and-message-encryption-decryption-between-client-and-server.html" class="sidebar-link">Sockets And Message Encryption/Decryption Between Client and Server</a></li><li><a href="/python/python-networking.html" class="sidebar-link">Python Networking</a></li><li><a href="/python/python-http-server.html" class="sidebar-link">Python HTTP Server</a></li><li><a href="/python/flask.html" class="sidebar-link">Flask</a></li><li><a href="/python/introduction-to-rabbitmq-using-amqpstorm.html" class="sidebar-link">Introduction to RabbitMQ using AMQPStorm</a></li><li><a href="/python/descriptor.html" class="sidebar-link">Descriptor</a></li><li><a href="/python/tempfile-namedtemporaryfile.html" class="sidebar-link">tempfile NamedTemporaryFile</a></li><li><a href="/python/input-subset-and-output-external-data-files-using-pandas.html" class="sidebar-link">Input, Subset and Output External Data Files using Pandas</a></li><li><a href="/python/unzipping-files.html" class="sidebar-link">Unzipping Files</a></li><li><a href="/python/working-with-zip-archives.html" class="sidebar-link">Working with ZIP archives</a></li><li><a href="/python/getting-start-with-gzip.html" class="sidebar-link">getting start with GZip</a></li><li><a href="/python/stack.html" class="sidebar-link">Stack</a></li><li><a href="/python/working-around-the-global-interpreter-lock-gil.html" class="sidebar-link">Working around the Global Interpreter Lock (GIL)</a></li><li><a href="/python/deployment.html" class="sidebar-link">Deployment</a></li><li><a href="/python/logging.html" class="sidebar-link">Logging</a></li><li><a href="/python/web-server-gateway-interface-wsgi.html" class="sidebar-link">Web Server Gateway Interface (WSGI)</a></li><li><a href="/python/python-server-sent-events.html" class="sidebar-link">Python Server Sent Events</a></li><li><a href="/python/alternatives-to-switch-statement-from-other-languages.html" class="sidebar-link">Alternatives to switch statement from other languages</a></li><li><a href="/python/list-destructuring-aka-packing-and-unpacking.html" class="sidebar-link">List destructuring (aka packing and unpacking)</a></li><li><a href="/python/accessing-python-source-code-and-bytecode.html" class="sidebar-link">Accessing Python source code and bytecode</a></li><li><a href="/python/mixins.html" class="sidebar-link">Mixins</a></li><li><a href="/python/attribute-access.html" class="sidebar-link">Attribute Access</a></li><li><a href="/python/arcpy.html" class="sidebar-link">ArcPy</a></li><li><a href="/python/abstract-base-classes-abc.html" class="sidebar-link">Abstract Base Classes (abc)</a></li><li><a href="/python/plugin-and-extension-classes.html" class="sidebar-link">Plugin and Extension Classes</a></li><li><a href="/python/immutable-datatypes-int-float-str-tuple-and-frozensets.html" class="sidebar-link">Immutable datatypes(int, float, str, tuple and frozensets)</a></li><li><a href="/python/incompatibilities-moving-from-python-2-to-python-3.html" class="sidebar-link">Incompatibilities moving from Python 2 to Python 3</a></li><li><a href="/python/2to3-tool.html" class="sidebar-link">2to3 tool</a></li><li><a href="/python/non-official-python-implementations.html" class="sidebar-link">Non-official Python implementations</a></li><li><a href="/python/abstract-syntax-tree.html" class="sidebar-link">Abstract syntax tree</a></li><li><a href="/python/unicode-and-bytes.html" class="sidebar-link">Unicode and bytes</a></li><li><a href="/python/python-serial-communication-pyserial.html" class="sidebar-link">Python Serial Communication (pyserial)</a></li><li><a href="/python/neo4j-and-cypher-using-py2neo.html" class="sidebar-link">Neo4j and Cypher using Py2Neo</a></li><li><a href="/python/basic-curses-with-python.html" class="sidebar-link">Basic Curses with Python</a></li><li><a href="/python/templates-in-python.html" class="sidebar-link">Templates in python</a></li><li><a href="/python/pillow.html" class="sidebar-link">Pillow</a></li><li><a href="/python/the-pass-statement.html" class="sidebar-link">The pass statement</a></li><li><a href="/python/cli-subcommands-with-precise-help-output.html" class="sidebar-link">CLI subcommands with precise help output</a></li><li><a href="/python/database-access.html" class="sidebar-link">Database Access</a></li><li><a href="/python/connecting-python-to-sql-server.html" class="sidebar-link">Connecting Python to SQL Server</a></li><li><a href="/python/postgresql.html" class="sidebar-link">PostgreSQL</a></li><li><a href="/python/python-and-excel.html" class="sidebar-link">Python and Excel</a></li><li><a href="/python/turtle-graphics.html" class="sidebar-link">Turtle Graphics</a></li><li><a href="/python/python-persistence.html" class="sidebar-link">Python Persistence</a></li><li><a href="/python/design-patterns.html" class="sidebar-link">Design Patterns</a></li><li><a href="/python/hashlib.html" class="sidebar-link">hashlib</a></li><li><a href="/python/creating-a-windows-service-using-python.html" class="sidebar-link">Creating a Windows service using Python</a></li><li><a href="/python/mutable-vs-immutable-and-hashable-in-python.html" class="sidebar-link">Mutable vs Immutable (and Hashable) in Python</a></li><li><a href="/python/configparser.html" class="sidebar-link">configparser</a></li><li><a href="/python/optical-character-recognition.html" class="sidebar-link">Optical Character Recognition</a></li><li><a href="/python/virtual-environments.html" class="sidebar-link">Virtual environments</a></li><li><a href="/python/python-virtual-environment-virtualenv.html" class="sidebar-link">Python Virtual Environment - virtualenv</a></li><li><a href="/python/virtual-environment-with-virtualenvwrapper.html" class="sidebar-link">virtual environment with virtualenvwrapper</a></li><li><a href="/python/create-virtual-environment-with-virtualenvwrapper-in-windows.html" class="sidebar-link">Create virtual environment with virtualenvwrapper in windows</a></li><li><a href="/python/sys.html" class="sidebar-link">sys</a></li><li><a href="/python/chempy-python-package.html" class="sidebar-link">ChemPy - python package</a></li><li><a href="/python/pygame.html" class="sidebar-link">pygame</a></li><li><a href="/python/pyglet.html" class="sidebar-link">Pyglet</a></li><li><a href="/python/audio.html" class="sidebar-link">Audio</a></li><li><a href="/python/pyaudio.html" class="sidebar-link">pyaudio</a></li><li><a href="/python/shelve.html" class="sidebar-link">shelve</a></li><li><a href="/python/iot-programming-with-python-and-raspberry-pi.html" class="sidebar-link">IoT Programming with Python and Raspberry PI</a></li><li><a href="/python/kivy-cross-platform-python-framework-for-nui-development.html" class="sidebar-link">kivy - Cross-platform Python Framework for NUI Development</a></li><li><a href="/python/pandas-transform-preform-operations-on-groups-and-concatenate-the-results.html" class="sidebar-link">Pandas Transform: Preform operations on groups and concatenate the results</a></li><li><a href="/python/similarities-in-syntax-differences-in-meaning-python-vs-javascript.html" class="sidebar-link">Similarities in syntax, Differences in meaning: Python vs. JavaScript</a></li><li><a href="/python/call-python-from-c.html" class="sidebar-link">Call Python from C#</a></li><li><a href="/python/ctypes.html" class="sidebar-link">ctypes</a></li><li><a href="/python/writing-extensions.html" class="sidebar-link">Writing extensions</a></li><li><a href="/python/python-lex-yacc.html" class="sidebar-link">Python Lex-Yacc</a></li><li><a href="/python/unit-testing.html" class="sidebar-link">Unit Testing</a></li><li><a href="/python/py-test.html" class="sidebar-link">py.test</a></li><li><a href="/python/profiling.html" class="sidebar-link">Profiling</a></li><li><a href="/python/python-speed-of-program.html" class="sidebar-link">Python speed of program</a></li><li><a href="/python/performance-optimization.html" class="sidebar-link">Performance optimization</a></li><li><a href="/python/security-and-cryptography.html" class="sidebar-link">Security and Cryptography</a></li><li><a href="/python/secure-shell-connection-in-python.html" class="sidebar-link">Secure Shell Connection in Python</a></li><li><a href="/python/python-anti-patterns.html" class="sidebar-link">Python Anti-Patterns</a></li><li><a href="/python/common-pitfalls.html" class="sidebar-link">Common Pitfalls</a></li><li><a href="/python/hidden-features.html" class="sidebar-link">Hidden Features</a></li><li><a href="/python/date-formatting.html" class="sidebar-link">Date Formatting</a></li><li><a href="/python/ijson.html" class="sidebar-link">ijson</a></li><li><a href="/python/django.html" class="sidebar-link">Django</a></li><li><a href="/python/code-blocks-execution-frames-and-namespaces.html" class="sidebar-link">Code blocks, execution frames, and namespaces</a></li><li><a href="/python/contributors.html" class="sidebar-link">The Contributors</a></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="importing-modules"><a href="#importing-modules" class="header-anchor">#</a> Importing modules</h1> <h2 id="the-all-special-variable"><a href="#the-all-special-variable" class="header-anchor">#</a> The <strong>all</strong> special variable</h2> <p>Modules can have a special variable named <code>__all__</code> to restrict what variables are imported when using <code>from mymodule import *</code>.</p> <p>Given the following module:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token comment"># mymodule.py</span>
__all__ <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'imported_by_star'</span><span class="token punctuation">]</span>
imported_by_star <span class="token operator">=</span> <span class="token number">42</span>
not_imported_by_star <span class="token operator">=</span> <span class="token number">21</span>
</code></pre></div><p>Only <code>imported_by_star</code> is imported when using <code>from mymodule import *</code>:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">from</span> mymodule <span class="token keyword">import</span> <span class="token operator">*</span>
<span class="token operator">>></span><span class="token operator">></span> imported_by_star
<span class="token number">42</span>
<span class="token operator">>></span><span class="token operator">></span> not_imported_by_star
Traceback <span class="token punctuation">(</span>most recent call last<span class="token punctuation">)</span><span class="token punctuation">:</span>
File <span class="token string">"<stdin>"</span><span class="token punctuation">,</span> line <span class="token number">1</span><span class="token punctuation">,</span> <span class="token keyword">in</span> <span class="token operator"><</span>module<span class="token operator">></span>
NameError<span class="token punctuation">:</span> name <span class="token string">'not_imported_by_star'</span> <span class="token keyword">is</span> <span class="token keyword">not</span> defined
</code></pre></div><p>However, <code>not_imported_by_star</code> can be imported explicitly:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">from</span> mymodule <span class="token keyword">import</span> not_imported_by_star
<span class="token operator">>></span><span class="token operator">></span> not_imported_by_star
<span class="token number">21</span>
</code></pre></div><h2 id="importing-a-module"><a href="#importing-a-module" class="header-anchor">#</a> Importing a module</h2> <p>Use the <code>import</code> statement:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">import</span> random
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">print</span><span class="token punctuation">(</span>random<span class="token punctuation">.</span>randint<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">4</span>
</code></pre></div><p><code>import module</code> will import a module and then allow you to reference its objects -- values, functions and classes, for example -- using the <code>module.name</code> syntax. In the above example, the <code>random</code> module is imported, which contains the <code>randint</code> function. So by importing <code>random</code> you can call <code>randint</code> with <code>random.randint</code>.</p> <p>You can import a module and assign it to a different name:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">import</span> random <span class="token keyword">as</span> rn
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">print</span><span class="token punctuation">(</span>rn<span class="token punctuation">.</span>randint<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">4</span>
</code></pre></div><p>If your python file <code>main.py</code> is in the same folder as <code>custom.py</code>. You can import it like this:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">import</span> custom
</code></pre></div><p>It is also possible to import a function from a module:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">from</span> math <span class="token keyword">import</span> sin
<span class="token operator">>></span><span class="token operator">></span> sin<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
<span class="token number">0.8414709848078965</span>
</code></pre></div><p>To import specific functions deeper down into a module, the dot operator may be used <strong>only</strong> on the left side of the <code>import</code> keyword:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">from</span> urllib<span class="token punctuation">.</span>request <span class="token keyword">import</span> urlopen
</code></pre></div><p>In python, we have two ways to call function from top level. One is <code>import</code> and another is <code>from</code>. We should use <code>import</code> when we have a possibility of name collision. Suppose we have <code>hello.py</code> file and <code>world.py</code> files having same function named <code>function</code>. Then <code>import</code> statement will work good.</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">from</span> hello <span class="token keyword">import</span> function
<span class="token keyword">from</span> world <span class="token keyword">import</span> function
function<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">#world's function will be invoked. Not hello's </span>
</code></pre></div><p>In general <code>import</code> will provide you a namespace.</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">import</span> hello
<span class="token keyword">import</span> world
hello<span class="token punctuation">.</span>function<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># exclusively hello's function will be invoked </span>
world<span class="token punctuation">.</span>function<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># exclusively world's function will be invoked</span>
</code></pre></div><p>But if you are sure enough, in your whole project there is no way having same function name you should use <code>from</code> statement</p> <p>Multiple imports can be made on the same line:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token operator">>></span><span class="token operator">></span> <span class="token comment"># Multiple modules</span>
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">import</span> time<span class="token punctuation">,</span> sockets<span class="token punctuation">,</span> random
<span class="token operator">>></span><span class="token operator">></span> <span class="token comment"># Multiple functions</span>
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">from</span> math <span class="token keyword">import</span> sin<span class="token punctuation">,</span> cos<span class="token punctuation">,</span> tan
<span class="token operator">>></span><span class="token operator">></span> <span class="token comment"># Multiple constants</span>
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">from</span> math <span class="token keyword">import</span> pi<span class="token punctuation">,</span> e
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">print</span><span class="token punctuation">(</span>pi<span class="token punctuation">)</span>
<span class="token number">3.141592653589793</span>
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">print</span><span class="token punctuation">(</span>cos<span class="token punctuation">(</span><span class="token number">45</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">0.5253219888177297</span>
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">print</span><span class="token punctuation">(</span>time<span class="token punctuation">.</span>time<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">1482807222.7240417</span>
</code></pre></div><p>The keywords and syntax shown above can also be used in combinations:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">from</span> urllib<span class="token punctuation">.</span>request <span class="token keyword">import</span> urlopen <span class="token keyword">as</span> geturl<span class="token punctuation">,</span> pathname2url <span class="token keyword">as</span> path2url<span class="token punctuation">,</span> getproxies
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">from</span> math <span class="token keyword">import</span> factorial <span class="token keyword">as</span> fact<span class="token punctuation">,</span> gamma<span class="token punctuation">,</span> atan <span class="token keyword">as</span> arctan
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">import</span> random<span class="token punctuation">.</span>randint<span class="token punctuation">,</span> time<span class="token punctuation">,</span> sys
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">print</span><span class="token punctuation">(</span>time<span class="token punctuation">.</span>time<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">1482807222.7240417</span>
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">print</span><span class="token punctuation">(</span>arctan<span class="token punctuation">(</span><span class="token number">60</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token number">1.554131203080956</span>
<span class="token operator">>></span><span class="token operator">></span> filepath <span class="token operator">=</span> <span class="token string">"/dogs/jumping poodle (december).png"</span>
<span class="token operator">>></span><span class="token operator">></span> <span class="token keyword">print</span><span class="token punctuation">(</span>path2url<span class="token punctuation">(</span>filepath<span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token operator">/</span>dogs<span class="token operator">/</span>jumping<span class="token operator">%</span>20poodle<span class="token operator">%</span><span class="token number">20</span><span class="token operator">%</span>28december<span class="token operator">%</span><span class="token number">29.</span>png
</code></pre></div><h2 id="import-modules-from-an-arbitrary-filesystem-location"><a href="#import-modules-from-an-arbitrary-filesystem-location" class="header-anchor">#</a> Import modules from an arbitrary filesystem location</h2> <p>If you want to import a module that doesn't already exist as a built-in module in the <a href="https://docs.python.org/3/library/" target="_blank" rel="noopener noreferrer">Python Standard Library<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> nor as a side-package, you can do this by adding the path to the directory where your module is found to <a href="https://docs.python.org/3/library/sys.html#sys.path" target="_blank" rel="noopener noreferrer"><code>sys.path</code><span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>. This may be useful where multiple python environments exist on a host.</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">import</span> sys
sys<span class="token punctuation">.</span>path<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token string">"/path/to/directory/containing/your/module"</span><span class="token punctuation">)</span>
<span class="token keyword">import</span> mymodule
</code></pre></div><p>It is important that you append the path to the <strong>directory</strong> in which <code>mymodule</code> is found, not the path to the module itself.</p> <h2 id="importing-all-names-from-a-module"><a href="#importing-all-names-from-a-module" class="header-anchor">#</a> Importing all names from a module</h2> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">from</span> module_name <span class="token keyword">import</span> <span class="token operator">*</span>
</code></pre></div><p>for example:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">from</span> math <span class="token keyword">import</span> <span class="token operator">*</span>
sqrt<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># instead of math.sqrt(2)</span>
ceil<span class="token punctuation">(</span><span class="token number">2.7</span><span class="token punctuation">)</span> <span class="token comment"># instead of math.ceil(2.7)</span>
</code></pre></div><p>This will import all names defined in the <code>math</code> module into the global namespace, other than names that begin with an underscore (which indicates that the writer feels that it is for internal use only).</p> <p><strong>Warning</strong>: If a function with the same name was already defined or imported, it will be <strong>overwritten</strong>. Almost always importing only specific names <code>from math import sqrt, ceil</code> is the <strong>recommended way</strong>:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">def</span> <span class="token function">sqrt</span><span class="token punctuation">(</span>num<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"I don't know what's the square root of {}."</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>num<span class="token punctuation">)</span><span class="token punctuation">)</span>
sqrt<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span>
<span class="token comment"># Output: I don't know what's the square root of 4.</span>
<span class="token keyword">from</span> math <span class="token keyword">import</span> <span class="token operator">*</span>
sqrt<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span>
<span class="token comment"># Output: 2.0</span>
</code></pre></div><p>Starred imports are only allowed at the module level. Attempts to perform them in class or function definitions result in a <code>SyntaxError</code>.</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">def</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">from</span> math <span class="token keyword">import</span> <span class="token operator">*</span>
</code></pre></div><p>and</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">class</span> <span class="token class-name">A</span><span class="token punctuation">:</span>
<span class="token keyword">from</span> math <span class="token keyword">import</span> <span class="token operator">*</span>
</code></pre></div><p>both fail with:</p> <div class="language-py extra-class"><pre class="language-py"><code>SyntaxError<span class="token punctuation">:</span> <span class="token keyword">import</span> <span class="token operator">*</span> only allowed at module level
</code></pre></div><h2 id="programmatic-importing"><a href="#programmatic-importing" class="header-anchor">#</a> Programmatic importing</h2> <p>To import a module through a function call, use the <code>importlib</code> module (included in Python starting in version 2.7):</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">import</span> importlib
random <span class="token operator">=</span> importlib<span class="token punctuation">.</span>import_module<span class="token punctuation">(</span><span class="token string">"random"</span><span class="token punctuation">)</span>
</code></pre></div><p>The <code>importlib.import_module()</code> function will also import the submodule of a package directly:</p> <div class="language-py extra-class"><pre class="language-py"><code>collections_abc <span class="token operator">=</span> importlib<span class="token punctuation">.</span>import_module<span class="token punctuation">(</span><span class="token string">"collections.abc"</span><span class="token punctuation">)</span>
</code></pre></div><p>For older versions of Python, use the <code>imp</code> module.</p> <p>Use the functions <code>imp.find_module</code> and <code>imp.load_module</code> to perform a programmatic import.</p> <p>Taken from <a href="https://docs.python.org/2/library/imp.html#examples" target="_blank" rel="noopener noreferrer">standard library documentation<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">import</span> imp<span class="token punctuation">,</span> sys
<span class="token keyword">def</span> <span class="token function">import_module</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">:</span>
fp<span class="token punctuation">,</span> pathname<span class="token punctuation">,</span> description <span class="token operator">=</span> imp<span class="token punctuation">.</span>find_module<span class="token punctuation">(</span>name<span class="token punctuation">)</span>
<span class="token keyword">try</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> imp<span class="token punctuation">.</span>load_module<span class="token punctuation">(</span>name<span class="token punctuation">,</span> fp<span class="token punctuation">,</span> pathname<span class="token punctuation">,</span> description<span class="token punctuation">)</span>
<span class="token keyword">finally</span><span class="token punctuation">:</span>
<span class="token keyword">if</span> fp<span class="token punctuation">:</span>
fp<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre></div><p>Do <strong>NOT</strong> use <code>__import__()</code> to programmatically import modules! There are subtle details involving <code>sys.modules</code>, the <code>fromlist</code> argument, etc. that are easy to overlook which <code>importlib.import_module()</code> handles for you.</p> <h2 id="pep8-rules-for-imports"><a href="#pep8-rules-for-imports" class="header-anchor">#</a> PEP8 rules for Imports</h2> <p>Some recommended <a href="https://www.python.org/dev/peps/pep-0008/#imports" target="_blank" rel="noopener noreferrer">PEP8<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> style guidelines for imports:</p> <li>
Imports should be on separate lines:
<div class="language-py extra-class"><pre class="language-py"><code> <span class="token keyword">from</span> math <span class="token keyword">import</span> sqrt<span class="token punctuation">,</span> ceil <span class="token comment"># Not recommended</span>
<span class="token keyword">from</span> math <span class="token keyword">import</span> sqrt <span class="token comment"># Recommended</span>
<span class="token keyword">from</span> math <span class="token keyword">import</span> ceil
</code></pre></div></li> <li>
Order imports as follows at the top of the module:
<blockquote><ul>
1. Standard library imports
1. Related third party imports
1. Local application/library specific imports
</ul></blockquote></li> <li>
Wildcard imports should be avoided as it leads to confusion in names in the current namespace. If you do `from module import *`, it can be unclear if a specific name in your code comes from `module` or not. This is doubly true if you have multiple `from module import *`-type statements.
</li> <li>
Avoid using relative imports; use explicit imports instead.
</li> <h2 id="importing-specific-names-from-a-module"><a href="#importing-specific-names-from-a-module" class="header-anchor">#</a> Importing specific names from a module</h2> <p>Instead of importing the complete module you can import only specified names:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">from</span> random <span class="token keyword">import</span> randint <span class="token comment"># Syntax "from MODULENAME import NAME1[, NAME2[, ...]]"</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>randint<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Out: 5</span>
</code></pre></div><p><code>from random</code> is needed, because the python interpreter has to know from which resource it should import a function or class and <code>import randint</code> specifies the function or class itself.</p> <p>Another example below (similar to the one above):</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">from</span> math <span class="token keyword">import</span> pi
<span class="token keyword">print</span><span class="token punctuation">(</span>pi<span class="token punctuation">)</span> <span class="token comment"># Out: 3.14159265359</span>
</code></pre></div><p>The following example will raise an error, because we haven't imported a module:</p> <div class="language-py extra-class"><pre class="language-py"><code>random<span class="token punctuation">.</span>randrange<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token comment"># works only if "import random" has been run before</span>
</code></pre></div><p>Outputs:</p> <div class="language-py extra-class"><pre class="language-py"><code>NameError<span class="token punctuation">:</span> name <span class="token string">'random'</span> <span class="token keyword">is</span> <span class="token keyword">not</span> defined
</code></pre></div><p>The python interpreter does not understand what you mean with <code>random</code>. It needs to be declared by adding <code>import random</code> to the example:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">import</span> random
random<span class="token punctuation">.</span>randrange<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span>
</code></pre></div><h2 id="importing-submodules"><a href="#importing-submodules" class="header-anchor">#</a> Importing submodules</h2> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">from</span> module<span class="token punctuation">.</span>submodule <span class="token keyword">import</span> function
</code></pre></div><p>This imports <code>function</code> from <code>module.submodule</code>.</p> <h2 id="import-function"><a href="#import-function" class="header-anchor">#</a> <strong>import</strong>() function</h2> <p>The <code>__import__()</code> function can be used to import modules where the name is only known at runtime</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">if</span> user_input <span class="token operator">==</span> <span class="token string">"os"</span><span class="token punctuation">:</span>
os <span class="token operator">=</span> <span class="token builtin">__import__</span><span class="token punctuation">(</span><span class="token string">"os"</span><span class="token punctuation">)</span>
<span class="token comment"># equivalent to import os</span>
</code></pre></div><p>This function can also be used to specify the file path to a module</p> <div class="language-py extra-class"><pre class="language-py"><code>mod <span class="token operator">=</span> <span class="token builtin">__import__</span><span class="token punctuation">(</span><span class="token string">r"C:/path/to/file/anywhere/on/computer/module.py"</span><span class="token punctuation">)</span>
</code></pre></div><h2 id="re-importing-a-module"><a href="#re-importing-a-module" class="header-anchor">#</a> Re-importing a module</h2> <p>When using the interactive interpreter, you might want to reload a module. This can be useful if you're editing a module and want to import the newest version, or if you've monkey-patched an element of an existing module and want to revert your changes.</p> <p>Note that you <strong>can't</strong> just <code>import</code> the module again to revert:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">import</span> math
math<span class="token punctuation">.</span>pi <span class="token operator">=</span> <span class="token number">3</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token comment"># 3</span>
<span class="token keyword">import</span> math
<span class="token keyword">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token comment"># 3</span>
</code></pre></div><p>This is because the interpreter registers every module you import. And when you try to reimport a module, the interpreter sees it in the register and does nothing. So the hard way to reimport is to use <code>import</code> after removing the corresponding item from the register:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token comment"># 3</span>
<span class="token keyword">import</span> sys
<span class="token keyword">if</span> <span class="token string">'math'</span> <span class="token keyword">in</span> sys<span class="token punctuation">.</span>modules<span class="token punctuation">:</span> <span class="token comment"># Is the ``math`` module in the register?</span>
<span class="token keyword">del</span> sys<span class="token punctuation">.</span>modules<span class="token punctuation">[</span><span class="token string">'math'</span><span class="token punctuation">]</span> <span class="token comment"># If so, remove it.</span>
<span class="token keyword">import</span> math
<span class="token keyword">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token comment"># 3.141592653589793</span>
</code></pre></div><p>But there is more a straightforward and simple way.</p> <h3 id="python-2"><a href="#python-2" class="header-anchor">#</a> Python 2</h3> <p>Use the <code>reload</code> function:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">import</span> math
math<span class="token punctuation">.</span>pi <span class="token operator">=</span> <span class="token number">3</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token comment"># 3</span>
<span class="token builtin">reload</span><span class="token punctuation">(</span>math<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token comment"># 3.141592653589793</span>
</code></pre></div><h3 id="python-3"><a href="#python-3" class="header-anchor">#</a> Python 3</h3> <p>The <code>reload</code> function has moved to <code>importlib</code>:</p> <div class="language-py extra-class"><pre class="language-py"><code><span class="token keyword">import</span> math
math<span class="token punctuation">.</span>pi <span class="token operator">=</span> <span class="token number">3</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token comment"># 3</span>
<span class="token keyword">from</span> importlib <span class="token keyword">import</span> <span class="token builtin">reload</span>
<span class="token builtin">reload</span><span class="token punctuation">(</span>math<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token comment"># 3.141592653589793</span>
</code></pre></div><h4 id="syntax"><a href="#syntax" class="header-anchor">#</a> Syntax</h4> <ul><li>import <strong>module_name</strong></li> <li>import <strong>module_name.submodule_name</strong></li> <li>from <strong>module_name</strong> import *</li> <li>from <strong>module_name</strong> import <strong>submodule_name</strong> [, <strong>class_name</strong>, <strong>function_name</strong>, ...etc]</li> <li>from <strong>module_name</strong> import <strong>some_name</strong> as <strong>new_name</strong></li> <li>from <strong>module_name.submodule_name</strong> import <strong>class_name</strong> [, <strong>function_name</strong>, ...etc]</li></ul> <h4 id="remarks"><a href="#remarks" class="header-anchor">#</a> Remarks</h4> <p>Importing a module will make Python evaluate all top-level code in this module so it <strong>learns</strong> all the functions, classes, and variables that the module contains. When you want a module of yours to be imported somewhere else, be careful with your top-level code, and encapsulate it into <code>if __name__ == '__main__':</code> if you don't want it to be executed when the module gets imported.</p></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/devtut/generate/edit/master/docs/python/importing-modules.md" target="_blank" rel="noopener noreferrer">Edit this page on GitHub</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <!----></footer> <div class="page-nav"><p class="inner"><span class="prev">
←
<a href="/python/using-loops-within-functions.html" class="prev">
Using loops within functions
</a></span> <span class="next"><a href="/python/difference-between-module-and-package.html">
Difference between Module and Package
</a>
→
</span></p></div> </main></div><div class="global-ui"><!----></div></div>
<script src="/assets/js/app.1779e102.js" defer></script><script src="/assets/js/3.2cfa8016.js" defer></script><script src="/assets/js/2723.6c1bf32e.js" defer></script>
</body>
</html>