In this TensorFlow tutorial, I will show you how to solve **Attributeerror: module ‘tensorflow’ has no attribute ‘py_function’**.

While working on my project, which was based on Tensorflow version 1.x and when I updated the Tensorflow to the latest version, then my project began to show **Attributeerror: module ‘tensorflow’ has no attribute ‘py_function’.**

Then I solved the error, but I thought sharing the solution to help you if you encounter this error would be helpful. So, in this tutorial, I have explained two ways to solve this error.

## Attributeerror: module ‘tensorflow’ has no attribute ‘py_func’

The error **Attributeerror: module ‘tensorflow’ has no attribute ‘py_func’** occurs when you try to use the **py_function** method, which is used to wrap a Python function and convert it into a Tensorflow operation.

Let me show you how you may get this error.

```
import tensorflow as tf
def numpy_new_func(n):
n[0] = 0.
return n
tf.py_func(numpy_new_func, inp=[tf.constant([2., 3.])],
Tout=tf.float32, stateful=False)
```

This error means Tensorflow cannot find the **‘py_function’** attribute within its module, which leads to the failure of the code execution.

There can be multiple causes of the error; for example, you are using an old version of TensorFlow that doesn’t support **‘py_function’** attribute. This function exists in the TensorFlow 1.14 and in the TensorFlow version 2.x.x.

If you use an older version, you may get this error.

Another reason can be changed in the tensorflow API, as in recent years there have been massive changes in the tensorflow API, so here, if the code you are using was written using the older version of the Tensorflow, it may no longer be compatible with the current or latest version of TensorFlow which can lead to attributes errors.

The solution to this error is to follow the below steps:

First, ensure you have installed the latest version of tensorflow; if not, follow this tutorial How to Install TensorFlow?.

To review your code to see if it is compatible with the current version of TensorFlow, you can visit TensorFlow’s official documentation.

Or use the **tf.compat.v1.py_func()**, and it is a near but equivalent TensorFlow tensor to the wrapped function rather than NumPy arrays, which can benefit from accelerators and give gradients.

The syntax is given below.

Let’s look at the Syntax and understand the working of **the tf.compat.v1.py_func()** function in Python TensorFlow.

```
tf.compat.v1.py_func(
func, inp, Tout, stateful=True, name=None
)
```

Now let’s use the same example, but instead of **tf.py_function(),** use **tf.compat.v1.py_func()**

```
import tensorflow as tf
def numpy_new_func(n):
n[0] = 0.
return n
tf.compat.v1.py_func(numpy_new_func, inp=[tf.constant([2., 3.])],
tout=tf.float32, stateful=False)
```

So, as you can see, you don’t get the error anymore, but this is not the only solution. There is another alternate function, **tf.numpy_function()**, that you can use in place of **tf.py_function()**.

Let’s use that function, so use the same example. Just replace the **tf. compact.v1.py_func()** with **tf.numpy_function()** as shown in the below code.

```
import tensorflow as tf
def numpy_new_func(n):
n[0] = 0.
return n
tf.numpy_function(numpy_new_func, inp=[tf.constant([2., 3.])],
Tout=tf.float32, stateful=False)
```

Look, you use the **tf.numpy_function()** instead of **tf.py_function()**, you get the same result; this is how to solve the error **Attributeerror: module ‘tensorflow’ has no attribute ‘py_func**‘ using alternate methods **compact.v1.py_func()** with **tf.numpy_function()**.

I hope you understand how to solve the error, but I suggest you always visit the official documentation to see if there is a change in the Tensorflow module or function.

## Conclusion

You learned how to resolve the **Attributeerror: module ‘tensorflow’ has no attribute ‘py_function’**.

Where you found that there are two alternate functions, **compact.v1.py_func()**, with **tf.numpy_function()** that can used in place of the **tf.py_function().**

You may like to read:

- Module ‘tensorflow’ has no attribute ‘optimizers’
- Modulenotfounderror no module named ‘tensorflow.keras.layers’
- Modulenotfounderror no module named ‘tensorflow.keras.utils.np_utils’

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.