# Ignition 7.9.21: ftplib not found

**URL:** <https://forum.inductiveautomation.com/t/ignition-7-9-21-ftplib-not-found/105940>\
**Category:** Ignition\
**Created:** [May 6, 2025, 7:56pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-21-ftplib-not-found/105940 "2025-05-06T19:56:46Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![gregory.sachs](https://avatars.discourse-cdn.com/v4/letter/g/e47774/32.png) [@gregory.sachs](https://forum.inductiveautomation.com/u/gregory.sachs)\
**Post date:** [May 6, 2025, 7:56pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-21-ftplib-not-found/105940/1 "2025-05-06T19:56:46Z")

</div>

I know, I need to upgrade, but can't right now on this server.  
I'm trying to script ftping, and i suddenly started getting this message:  
ImportError: No module named ftplib  
This was working, and suddenly stopped working.  
It does work from the script console.  
I have not tried restarting the gateway.  
ftplib exists in C:\Program Files\Inductive Automation\Ignition\user-lib\pylib

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/a/9a2b11138d2904f389eab5cee14807432f2f94cf.png)

```python
import os
from ftplib import FTP

```

Update: I did restart the gateway service, but not the entire server, and no change.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/f/2fe55c9bcb622f99bdeb35cb76fdbffe7d742ed4.png)  
Update #2:  
I created a tag change script to do the same function, and it ran succesfully once, then I get same message.  
Thanks!

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [May 7, 2025, 1:00pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-21-ftplib-not-found/105940/2 "2025-05-07T13:00:51Z")

</div>

Can you share the full script that runs once and then fails subsequently?

---

<div class="post-metadata">

**Author:** ![gregory.sachs](https://avatars.discourse-cdn.com/v4/letter/g/e47774/32.png) [@gregory.sachs](https://forum.inductiveautomation.com/u/gregory.sachs)\
**Post date:** [May 7, 2025, 1:19pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-21-ftplib-not-found/105940/3 "2025-05-07T13:19:47Z")

</div>

It is really simple, just open an ftp connection, grab the files, save them.

I'm getting a similar error with a script that uses the csv library to process the files, where after running once it will be unable to find the csv moduel. I'm about to bounce this to a different server using 8.1. I've tried various versions of the import ftplib, from ftplib import, etc....

```python
if newValue.value:
	import os
	from ftplib import FTP
	import ftplib
	
	
	
	logger=system.util.getLogger('CPPVFTP')
	time=system.date.now()
	#logger.info('Started at '+str(time))
	
	ftp=FTP('xxxxxxxxx')
	ftp.login('anonymous','xxxxxxxxx')
	ftp.cwd('Data') 
	#logger.info('FTP Dir done')
	ftp.retrlines('LIST')    
	list=ftp.nlst()
	#set local directory
	workingdir=system.tag.read('[ADHF]ImportUtility/WorkingDirectory').value
	os.chdir(workingdir)
	for a in list: #This is run for each file
			#ftp and save the file
			fp=open(str(a),'wb')
			cmd='RETR '+str(a)
			ftp.retrbinary(cmd,fp.write)
			fp.close()
			logger.info('File Saved: '+str(a))
	#ftp.disconnect()
	ftp.quit()
	logger.info('Done')
	tag=event.getTagPath().toString()
	system.tag.write(tag,False)

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [May 7, 2025, 1:26pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-21-ftplib-not-found/105940/4 "2025-05-07T13:26:17Z")

</div>

You are redefining python's built-in name `list` as a local variable. That might be contributing.

---

<div class="post-metadata">

**Author:** ![gregory.sachs](https://avatars.discourse-cdn.com/v4/letter/g/e47774/32.png) [@gregory.sachs](https://forum.inductiveautomation.com/u/gregory.sachs)\
**Post date:** [May 7, 2025, 1:42pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-21-ftplib-not-found/105940/5 "2025-05-07T13:42:02Z")

</div>

Whoops-changed that and testing.  
Still runs once then unable to find module.

---

<div class="post-metadata">

**Author:** ![ryan.white](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan.white/32/73193_2.png) [@ryan.white](https://forum.inductiveautomation.com/u/ryan.white)\
**Post date:** [May 7, 2025, 3:18pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-21-ftplib-not-found/105940/6 "2025-05-07T15:18:59Z")

</div>

Is this defined in the project library or in an event script? If its not in a project library script, try defining it in one, moving the import statements to outside of the function definition like so:

```python
import os
from ftplib import FTP
import ftplib

def someFtpActionFunction():
    """ """
    # Your ftp stuff here

```

Also, someone more knowledgeable on me than this, could the `from ftplib import FTP` followed by the `import ftplib` cause any issues?

---

<div class="post-metadata">

**Author:** ![gregory.sachs](https://avatars.discourse-cdn.com/v4/letter/g/e47774/32.png) [@gregory.sachs](https://forum.inductiveautomation.com/u/gregory.sachs)\
**Post date:** [May 7, 2025, 3:46pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-21-ftplib-not-found/105940/7 "2025-05-07T15:46:35Z")

</div>

Implementing as a project library seems to be working, thanks!
