MyTetra Share
Делитесь знаниями!
How to import other Python files?
Время создания: 13.07.2018 15:30
Текстовые метки: python import py
Раздел: Python

How do I import other files in Python?


How exactly can I import a specific python file like import file.py?

How can I import a folder instead of a specific file?

I want to load a Python file dynamically at runtime, based on user input.

I want to know how to load just one specific part from the file.

For example, in main.py I have:


from extra import *

Although this gives me all the definitions in extra.py, when maybe all I want is a single definition:


def gap():

print

print

What do I add to the import statement to just get gap from extra.py?


python python-import

shareimprove this question

edited May 16 at 7:24


Lii

6,19943953

asked Feb 28 '10 at 3:40


Tamer

2,3363114

See Also: stackoverflow.com/questions/8663076/… – dreftymac May 18 '16 at 22:10

add a comment

11 Answers

active oldest votes

up vote

289

down vote

accepted

importlib is recent addition in Python to programmatically import a module. It just a wrapper around __import__ See https://docs.python.org/3/library/importlib.html#module-importlib


import importlib


moduleName = input('Enter module name:')

importlib.import_module(moduleName)

Update: Answer below is outdated. Use the more recent alternative above.


Just import file without the '.py' extension.


You can mark a folder as a package, by adding an empty file named __init__.py.


You can use the __import__ function. It takes the module name as a string. (Again: module name without the '.py' extension.)


pmName = input('Enter module name:')

pm = __import__(pmName)

print(dir(pm))

Type help(__import__) for more details.


shareimprove this answer

edited Feb 16 at 14:06


M-T-A

5,58752646

answered Feb 28 '10 at 3:42


Radian

4,42111531

2

If you add an import filename to the init.py then you can import the module directly as the folder name. – CornSmith Jul 22 '13 at 17:00

5

from help(__import__): Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module. – Tadhg McDonald-Jensen Feb 23 '16 at 15:04

add a comment

up vote

670

down vote

There are many ways to import a python file, all with their pros and cons.

Don't just hastily pick the first import strategy that works for you or else you'll have to rewrite the codebase later on when you find it doesn't meet your needs.


I'll start out explaining the easiest example #1, then I'll move toward the most professional and robust example #7


Example 1, Import a python module with python interpreter:


Put this in /home/el/foo/fox.py:


def what_does_the_fox_say():

print("vixens cry")

Get into the python interpreter:


el@apollo:/home/el/foo$ python

Python 2.7.3 (default, Sep 26 2013, 20:03:06)

>>> import fox

>>> fox.what_does_the_fox_say()

vixens cry

>>>

You imported fox through the python interpreter, invoked the python function what_does_the_fox_say() from within fox.py.


Example 2, Use execfile or (exec in Python 3) in a script to execute the other python file in place:


Put this in /home/el/foo2/mylib.py:


def moobar():

print("hi")

Put this in /home/el/foo2/main.py:


execfile("/home/el/foo2/mylib.py")

moobar()

run the file:


el@apollo:/home/el/foo$ python main.py

hi

The function moobar was imported from mylib.py and made available in main.py


Example 3, Use from ... import ... functionality:


Put this in /home/el/foo3/chekov.py:


def question():

print "where are the nuclear wessels?"

Put this in /home/el/foo3/main.py:


from chekov import question

question()

Run it like this:


el@apollo:/home/el/foo3$ python main.py

where are the nuclear wessels?

If you defined other functions in chekov.py, they would not be available unless you import *


Example 4, Import riaa.py if it's in a different file location from where it is imported


Put this in /home/el/foo4/stuff/riaa.py:


def watchout():

print "computers are transforming into a noose and a yoke for humans"

Put this in /home/el/foo4/main.py:


import sys

import os

sys.path.append(os.path.abspath("/home/el/foo4/stuff"))

from riaa import *

watchout()

Run it:


el@apollo:/home/el/foo4$ python main.py

computers are transforming into a noose and a yoke for humans

That imports everything in the foreign file from a different directory.


Example 5, use os.system("python yourfile.py")


import os

os.system("python yourfile.py")

Example 6, import your file via piggybacking the python startuphook:


See: https://docs.python.org/2/library/user.html


Put this code into your home directory in ~/.pythonrc.py


class secretclass:

def secretmessage(cls, myarg):

return myarg + " is if.. up in the sky, the sky"

secretmessage = classmethod( secretmessage )


def skycake(cls):

return "cookie and sky pie people can't go up and "

skycake = classmethod( skycake )

Put this code into your main.py (can be anywhere):


import user

msg = "The only way skycake tates good"

msg = user.secretclass.secretmessage(msg)

msg += user.secretclass.skycake()

print(msg + " have the sky pie! SKYCAKE!")

Run it:


$ python main.py

The only way skycake tates good is if.. up in the sky,

the skycookie and sky pie people can't go up and have the sky pie!

SKYCAKE!

Credit for this jist goes to: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Send along your up-boats.


Example 7, Most Robust: Import files in python with the bare import command:


Make a new directory /home/el/foo5/

Make a new directory /home/el/foo5/herp

Make an empty file named __init__.py under herp:


el@apollo:/home/el/foo5/herp$ touch __init__.py

el@apollo:/home/el/foo5/herp$ ls

__init__.py

Make a new directory /home/el/foo5/herp/derp


Under derp, make another __init__.py file:


el@apollo:/home/el/foo5/herp/derp$ touch __init__.py

el@apollo:/home/el/foo5/herp/derp$ ls

__init__.py

Under /home/el/foo5/herp/derp make a new file called yolo.py Put this in there:


def skycake():

print "SkyCake evolves to stay just beyond the cognitive reach of " +

"the bulk of men. SKYCAKE!!"

The moment of truth, Make the new file /home/el/foo5/main.py, put this in there;


from herp.derp.yolo import skycake

skycake()

Run it:


el@apollo:/home/el/foo5$ python main.py

SkyCake evolves to stay just beyond the cognitive reach of the bulk

of men. SKYCAKE!!

The empty __init__.py file communicates to the python interpreter that the developer intends this directory to be an importable package.


If you want to see my post on how to include ALL .py files under a directory see here: https://stackoverflow.com/a/20753073/445131


Bonus protip


whether you are using Mac, Linux or Windows, you need to be using python's idle editor as described here. It will unlock your python world. http://www.youtube.com/watch?v=DkW5CSZ_VII


shareimprove this answer

edited Oct 14 '17 at 17:15

answered Dec 23 '13 at 18:46


Eric Leschinski

77.8k35306255

4

You should also add Example 6: using __import__(py_file_name). Amazing guide anyway – oriadam Dec 22 '15 at 2:59

1

Every time I have an import issue I end up at this question and am always able to solve my problem. If I could upvote this for each time you've helped me, I would. – dgBP Feb 23 '16 at 7:23

2

What's the big difference between all of these, and why is one better than any other? For example 5, you write "Import files in python with the bare import command," but you also use the (bare?) import command in examples 1, 3 and 4, don't you? – HelloGoodbye Aug 10 '16 at 8:58

Hey Eric! I think you got me wrong.. I just wanted to answer HelloGoodbyes question "what's the big difference between all of these" because I too was curious and found the blog entry (which is NOT mine btw) which I thought was helpful for him too... – dpat Sep 11 '16 at 10:28

7

Good answer but the fact that you use a different import file as example all the times makes it cumbersome to read. – gented Mar 21 '17 at 21:59

show 3 more comments

up vote

33

down vote

To import a specific Python file at 'runtime' with a known name:


import os

import sys

...


scriptpath = "../Test/MyModule.py"


# Add the directory containing your module to the Python path (wants absolute paths)

sys.path.append(os.path.abspath(scriptpath))


# Do the import

import MyModule

shareimprove this answer

edited Sep 13 '14 at 12:44

answered Apr 30 '13 at 12:30


James

14.3k115485

add a comment

up vote

22

down vote

You do not have many complex methods to import a python file from one folder to another. Just create a __init__.py file to declare this folder is a python package and then go to your host file where you want to import just type


from root.parent.folder.file import variable, class, whatever


shareimprove this answer

edited Feb 24 '16 at 23:02


iwasrobbed

40.3k16113171

answered Jan 24 '13 at 14:08


Fatih Karatana

1,26921631

4

What if I want a relative path? – domih Jun 2 '17 at 9:22

add a comment

up vote

10

down vote

Import doc ..


The __init__.py files are required to make Python treat the directories as containing packages, this is done to prevent directories with a common name, such as string, from unintentionally hiding valid modules that occur later on the module search path.


__init__.py can just be an empty file, but it can also execute initialization code for the package or set the __all__ variable.


mydir/spam/__init__.py

mydir/spam/module.py

import spam.module

or

from spam import module

shareimprove this answer

edited Nov 19 '16 at 9:17


Max Alibaev

575312

answered Oct 2 '15 at 8:27


Sanyal

548618

add a comment

up vote

7

down vote

from file import function_name ######## Importing specific function

function_name() ######## Calling function

and


import file ######## Importing whole package

file.function1_name() ######## Calling function

file.function2_name() ######## Calling function

Here are the two simple ways I have understood by now and make sure your "file.py" file which you want to import as a library is present in your current directory only.


shareimprove this answer

edited Feb 16 at 19:49

answered Feb 9 at 18:49


Devendra Bhat

3361514

add a comment

up vote

4

down vote

the best way to import .py files is by way of __init__.py. the simplest thing to do, is to create an empty file named __init__.py in the same directory that your.py file is located.


this post by Mike Grouchy is a great explanation of __init__.py and its use for making, importing, and setting up python packages.


shareimprove this answer

edited Jun 27 '17 at 16:14

answered Jun 27 '17 at 15:43


supreme

8618

1

@GhostCat I have updated my response. thanks for the link "it would be preferable". – supreme Jun 27 '17 at 16:19

And understand that not everyone is living in your timezone. – GhostCat Jun 28 '17 at 4:07

add a comment

up vote

3

down vote

How I import is import the file and use shorthand of it's name.


import DoStuff.py as DS

DS.main()

Don't forget that your importing file MUST BE named with .py extension


shareimprove this answer

answered May 9 '16 at 9:01


Luke359

298312

add a comment

up vote

1

down vote

I'd like to add this note I don't very clearly elsewhere; inside a module/package, when loading from files, the module/package name must be prefixed with the mymodule. Imagine mymodule being layout like this:


/main.py

/mymodule

/__init__.py

/somefile.py

/otherstuff.py

When loading somefile.py/otherstuff.py from __init__.py the contents should look like:


from mymodule.somefile import somefunc

from mymodule.otherstuff import otherfunc

shareimprove this answer

edited Apr 28 at 17:19

answered Apr 18 at 9:51


Svend

5,56932039

add a comment

up vote

0

down vote

Just to import python file in another python file


lets say I have helper.py python file which has a display function like,


def display():

print("I'm working sundar gsv")

Now in app.py, you can use the display function,


import helper

helper.display()

The output,


I'm working sundar gsv


NOTE: No need to specify the .py extension.

Так же в этом разделе:
 
MyTetra Share v.0.53
Яндекс индекс цитирования