Importing variables from another file?
Asked Answered
H

8

233

How can I import variables from one file to another?

example: file1 has the variables x1 and x2 how to pass them to file2?

How can I import all of the variables from one to another?

Houseboat answered 22/6, 2013 at 22:4 Comment(1)
Why do you want to do that? Depending on the use-case, this is actually not what you really want.Trimorphism
A
236
from file1 import *  

will import all objects and methods in file1

Actor answered 22/6, 2013 at 22:9 Comment(6)
Do note, however, this is generally something you should not do.Mamelon
As David notes, this pollutes the namespace and can have catastrophic consequences by masking objects and functions from other modules including those in the standard distroActor
I tried to do it, but it seems like python can't find the file1, because I'm getting this error: ImportError: No module named file1Mader
Did you have a __init__.py file? See here for more details.Dosi
Prepending a . at the beginning of file1 worked for me. i.e from .file1 import *Munguia
how to map this to a variable name e.g from file1 import * f1Grantinaid
K
129

Import file1 inside file2:

To import all variables from file1 without flooding file2's namespace, use:

import file1

#now use file1.x1, file2.x2, ... to access those variables

To import all variables from file1 to file2's namespace( not recommended):

from file1 import *
#now use x1, x2..

From the docs:

While it is valid to use from module import * at module level it is usually a bad idea. For one, this loses an important property Python otherwise has — you can know where each toplevel name is defined by a simple “search” function in your favourite editor. You also open yourself to trouble in the future, if some module grows additional functions or classes.

Kaiserslautern answered 22/6, 2013 at 22:6 Comment(4)
and if I have 1000 variables to pass?Houseboat
@Ofek Just use import file1 then.Kaiserslautern
It doesn't import the variables :\Houseboat
it does import the variables, though you'll have to prepend file1.varX for each file.Bourdon
O
77

Best to import x1 and x2 explicitly:

from file1 import x1, x2

This allows you to avoid unnecessary namespace conflicts with variables and functions from file1 while working in file2.

But if you really want, you can import all the variables:

from file1 import * 
Outdare answered 12/11, 2014 at 15:56 Comment(0)
T
33

Actually this is not really the same to import a variable with:

from file1 import x1
print(x1)

and

import file1
print(file1.x1)

Altough at import time x1 and file1.x1 have the same value, they are not the same variables. For instance, call a function in file1 that modifies x1 and then try to print the variable from the main file: you will not see the modified value.

Treiber answered 9/5, 2018 at 12:24 Comment(1)
This is a major surprise to me! Thank you for this answer - and now I have to find out how to do this properly.Medicable
T
17

first.py:

a=5

second.py:

import first
print(first.a)

The result will be 5.

Tillie answered 29/6, 2020 at 6:31 Comment(0)
X
13

script1.py

title="Hello world"

script2.py is where we using script1 variable

Method 1:

import script1
print(script1.title)

Method 2:

from script1 import title
print(title)
Xanthippe answered 13/12, 2019 at 20:28 Comment(0)
B
10

Marc response is correct. Actually, you can print the memory address for the variables print(hex(id(libvar)) and you can see the addresses are different.

# mylib.py
libvar = None
def lib_method():
    global libvar
    print(hex(id(libvar)))

# myapp.py
from mylib import libvar, lib_method
import mylib

lib_method()
print(hex(id(libvar)))
print(hex(id(mylib.libvar)))
Beckwith answered 19/6, 2019 at 1:13 Comment(0)
T
0

if you need to import of a variable from a dir on the same level or below you can use "import_module" coming from you cwd of the project:

        from importlib import import_module
        mod = import_module(
            f"{cwd}.source.myfolder.myfile"
        )
        var = getattr(mod, "my_variable")
Tenace answered 29/9, 2022 at 14:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.