'Python: Can't import a function from another.py file

I have a file named handshake.py. Where there is a function send_data(argument). I want to import that function into another file named siptest.py. I am encountering two problems. I am using microsoft visual studio with windows 7, 64-bit. 1) I can't import function. I have tried using,

from handshake import*
handshkae.send_data(argument)

Which give me an error.

NameError: global name 'handshake' is not defined

Another option I have tried is using

import handshake
handshake.send_data(argument)

Which gives me an attribute error.

AttributeError: 'module' object has no attribute 'send_data'

If I use it the other way, such as

from handshake import send_data 

2) MS Visual studio says. No test discovered, please check the configuration settings but I still can run the test somehow. and it says that the test is failed because of Import Error.

ImportError: cannot import name send_data

Both of the said files are in same directory. Plus the function is defined in a class 'TCPhandshake' in handshake.py



Solution 1:[1]

One possible reason: there exists reference cycle between module a.py and b.py:

In a.py: import b
In b.py: import a

The solution is to break the cycle. You need to make it clear which module should do what and reduce the dependence.

Solution 2:[2]

Make sure both files are in the same directory and try:

from handshake import send_data

If this does not work, try to rename handshake.py file.

Solution 3:[3]

Are both handshake.py and siptest.py in the same directory?

If not You can try this: 1) Add __init__.py empty file to the directory that contains handshake.py. 2) Then add the path to that directory to LD_LIBRARY_PATH and PYTHONPATH

Solution 4:[4]

make sure the function is in the path

import sys
sys.path.insert(0, '/directory/tothe/handshakefile/')

and then

import handshake

Solution 5:[5]

I had the same issue, That happened while I tried to run the program from another directory by using python /home/name/workspace/test.py

Fix I tired.

import sys
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

This need to be added at the beginning. This works for me.

Solution 6:[6]

I find a way to import files in the same directory by implementing keyword as and a object variable for example

import file as fileObj

But the downside is that when you want access to the imported files variable you have to first take fileObj.fileObjVariable.

Solution 7:[7]

Try adding/updating the environment variable PYTHONPATH which should point to the folder that has handshake.py

Solution 8:[8]

Just make sure the files all are located in the root of the project, then this will work:

import handshake
handshake.send_data(argument)

Solution 9:[9]

You can use the method signTypedData from @metamask/eth-sig-util.

https://github.com/MetaMask/eth-sig-util/blob/main/src/sign-typed-data.ts#L521

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 mari
Solution 2 Kirin
Solution 3 Tejas
Solution 4 Areza
Solution 5 Jishnunand P K
Solution 6 Ginxxx
Solution 7 proton
Solution 8 Hamid Heydarian
Solution 9 Anderson Silva