I often bind a module to a local name using import as, e.g. import numpy as np.
When I use np., how can I configure Eclipse so that import numpy as np shows up in the list of import suggestions (when hitting Ctrl + 1 )?
Related
I have a script which is importing lots of packages, including import numpy as np.
I have lots of scripts which need to import all of these packages (including some of my own). To make my life easier, I have a file called mysetup.py in my path to import all the packages. It includes the statement in a function called "import numpy as np".
I run "main.py". It runs the following
from mysetup import *
import_my_stuff()
np.pi()
"mysetup.py"
def import_my_stuff():
import numpy as np
return
However, I am unable to use numpy in "main.py" - this code will fail. Any suggestions as to why?
The problem you are facing is a consequence of a very important features of Python: namespaces.
https://docs.python.org/3/tutorial/classes.html#python-scopes-and-namespaces
https://realpython.com/python-namespaces-scope/
Basically, in your case, when you do that (numpy) import inside the (import_my_stuff) function, you are defining the code object numpy/np inside the function namespace. (scope, if you prefer).
To solve your issue (the way you are doing; not the only way), you should simply import everything at the module top level (without a function encapsulating the imports):
mysetup.py:
import numpy as np
# other modules...
main.py:
from mysetup import *
np.pi()
Imports in functions are not the best idea.
But you can just define whatever imports you need in top level code of mysetup.py
import numpy as np
and then it will be available when you import * from mysetup
from mysetup import *
print(np.pi)
How do I import every module and every method in project folder?
(Note: This is not production code, it's for debugging.)
Example:
How do I make this:
from views.display_hot_keys import display_hot_keys
from views.display_zones import display_zones
from controllers.api_key_controller import all_api_keys_nicknames
from models.api_data_standardizer import single_balance_standardizer
..become something like this...
from controllers.* import *
from views.* import *
from models.* import *
Edit: Perhaps I'm missing something, but I don't see how this question is answered in How can I get a list of locally installed Python modules??
new to Python programming and have encountered an issue importing modules.
I have a main application (compare.py) with imports as follows :
# import the necessary packages
from skimage.measure import structural_similarity as ssim
import matplotlib.pyplot as plt
import numpy as np
import os
import skimage
from skimage import io
from skimage import color
from epilib import mse
from epilib import compare_images
and I have defined two functions in epilib, one called mse() and one called compare_images().
The code in mse() requires numpy. When I execute 'python compare.py', I get the following error message :
File "C:\Users\Dan\epilib.py", line 7, in mse err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
NameError: name 'np' is not defined
I assumed that because 'import numpy as np' was executed prior to import epilib, that the numpy library would be available to epilib? When I added 'import numpy as np' to the top of epilib, the issue resolved.
I don't see it as very efficient to have to move all the import statements to epilib. I was hoping to have epilib as just a library of functions and I could import into various python programs as required.
Is there a way to accomplish this?
That is not how python works, if you want to use numpy library in a module (in this case in eplib module), you need to import it in that module as well, eplib would get not the numpy module imported in your compare.py .
You should import numpy in eplib.py as -
import numpy as np
I do not think there would be any issue in efficiency, since once python imports a module for the first time, it caches the module in sys.modules , so whenever you re-import it (even if its in a different module) as long as its the same python process , Python would not re-import it, instead it would return the module object from sys.modules .
I am trying to write a function, which is itself loaded, to quickly import a bunch of modules globally.
I thought that, essentially, loaded modules could be treated as variables so I tried:
def loadMods():
global np
import numpy as np
and when I loaded numpy (calling np) there was no problem.
What I then did was to create a separate .py file called loadTest containing
# loadTest module
# coding: utf-8
def loadMod():
global np
import numpy as np
Then attempted to import numpy using this .py file in python (2.7):
import loadTest
loadTest.loadMod()
but now when attempting calling np I get
File "<stdin>", line 1, in <module>
NameError: name 'np' is not defined
Why does this occur? Any help or alternative ways of doing this would be much appreciated. Thanks a bunch :)
Instead of making a function to do this, why not make another module? You could name it something like modules.py and put all of your imports in there:
import numpy as np
import os
import sys
...
Then, all you need to do is a wildcard import:
from modules import *
and everything will be made available.
You must first define np like that.
In loadTest:
np=None
In somewhere other
import loadTest
loadTest.loadMod()
np=loadTest.np
I just installed ANACONDA and have set up my virtual environment and profile. When I enter a command like
from pandas import *
or
from numpy import random
the system pauses for a second before moving on to the next line, as expected. However, when I try to enter a command like
x = randn(100,100)
I get a message saying
name 'randn' is not defined
Also, when I run
imp.find_module("pandas")
I get
(None, 'C:\\Anaconda\\lib\\site-packages\\numpy', ('', '', 5))
Any ideas?
Your message title refers to scipy, but you didn't import anything from it, so I'm not sure why that's relevant. You did two imports:
from pandas import *
which I wouldn't actually recommend; I know it's done in some tutorials, but I prefer
import pandas as pd
to keep the namespace clean. In any case, randn isn't defined in the pandas namespace. Then you run
from numpy import random
which only adds one new name to the namespace: random. After you've done this, you can access randn via random.randn:
>>> from numpy import random
>>> random.randn(3)
array([-1.19504793, -0.54873061, -1.46225504])
If you really want to use simply randn, you could do
from numpy.random import randn