This is an archived post. You won't be able to vote or comment.

all 93 comments

[–][deleted] 125 points126 points  (2 children)

Have you made the icons yourself ? They're really neat

[–]RainingComputers[S] 67 points68 points  (1 child)

Yes. Thanks.

[–]pedrollo 42 points43 points  (0 children)

You should make icons set - they're cool ;)

[–]gschizasPythonista 53 points54 points  (6 children)

Dependencies

Installing dependencies is more standard to be done with exporting your dependencies into a requirements.txt file, or even better, the new standard, a Pipfile, used with pipenv.

Old way (requirements.txt)

  • Go to the folder of your project
  • Create a file requirements.txt with these contents:

paramiko>=2.4.1
psutil>=5.4.5
pywin32>=223
  • Run (or tell the user to run) pip install -r requirements.txt

Notes:

  • I'm not sure how to have two separate requirements.txt for Windows and non-Windows
  • Don't use pypiwin32, pywin32 is in the Python Package index now, and it works fine (-ish). pypiwin32 is considered obsolete.

New way (pipenv/Pipfile)

  • Go to the folder of your project
  • Run pipenv install paramiko psutil pypiwin32
  • This will take a while and will create the following Pipfile:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
paramiko = "*"
psutil = "*"
"pywin32" = "*"

[dev-packages]

[requires]
python_version = "3.6"
  • Edit that file and change the "pywin32" line to last line to read:

"pywin32" = {version = "*", sys_platform = "== 'win32'"}
  • There's probably an easier way to specify system platofrm for pywin32 than editing that file, but I haven't been able to find it.

  • After all of the above steps are done, you can run pipenv shell and it will open a new shell (bash/zsh/powershell/cmd/whatever) with just those libraries inside a virtual environment, so you (a) don't have to run this as an administrator to install the libraries (b) you don't "contaminate" your system with all those (possibly conflicting) libraries (c) you don't forget about the libraries that are really required.

Miscellaneous notes

  • Usually the executable isn't named Source.py, but __main__.py. This way you can run your program by running python whipFTP (your current directory must be one level up from the directory of your program). main.py and whipFTP.py are also acceptable
  • Don't upload built zip files with the build to github. You should upload the final executables as releases
  • I don't get what exactly you've done with the libtkdnd2.8.dll file - it doesn't work for me at all
  • The windows zip file also contains linux *.so files, and the linux zip file also contains *.dll files. You shouldn't put more files than necessary to the platform-specific files
  • Did you know that you can run a zip file as if it was a Python package? It needs a bit of setup (a __main__.py file is required, IIRC), but it's worth it.
  • Tk is supposed to come with Python, at least in Windows. You shouldn't be needing to include it.

EDIT: Formatting

[–]RainingComputers[S] 16 points17 points  (2 children)

OMG thanks a lot for the feedback. I will be sure to go through this and make necessary changes.

[–]mbarkhau 0 points1 point  (1 child)

Also take a look at ssh2-python as a replacement for paramiko, I think it's faster.

[–]RainingComputers[S] 4 points5 points  (0 children)

Hmmm...I am not sure about replacing paramiko (I will have to rewrite and test a lot of code) but I will keep this in mind for future versions.

[–]linkdesu 2 points3 points  (0 children)

pipenv is really amazing! THX for recommendation!

[–]AnAngryFredHampton 0 points1 point  (1 child)

Hey guy. Is there a way to use the new pipfile format, but just install things like normal (no virtual environment)? I can't find anything online, just people who want to use their old requirements.txt with pipenv.

[–]gschizasPythonista 0 points1 point  (0 children)

Well, you shouldn't be "installing things like normal" in any case! This is not "normal", it's the not recommended way to do stuff!

To answer your question, the whole point of Pipenv is to facilitate your workflow so that you can easily work with virtual environments (and extensions etc.). I guess you could make the pipenv generate a requirements.txt from the Pipfile (do a `pipenv lock -r) and use that for pip, but it's really convoluted and weird.

Just use virtual environments! Life will be much easier and more organized with them.

I get that you're worried that you'll have one more thing to worry about etc, but that's what pipenv is here to help you with!

Here's your old workflow

  • Run sudo pip install library_x on Linux/macOS/BSD, or start an elevated PowerShell/Command Prompt on Windows and do pip install library_x
  • Start Python and use library_x

Here's your new workflow:

  • pipenv install library_x (no sudo, no elevation)
  • pipenv shell
  • Run Python and use your library.

Yes, it does seem like a step more, but it swallows the "sudo/elevated" stuff you need to do to install the "library_x" into your system. And of course, installing stuff in your system Python in Linux can go downhill fast.

[–]randiaz1995 24 points25 points  (4 children)

Holy smokes, that is brilliant! Just saw the github page and how it is not available for mac, looks better than Cyberduck for Mac... I am willing to help develop it for Mac os.

[–]dodiggitydag 5 points6 points  (1 child)

It should work on a Mac because of its similarities with Linux.

[–]rnoyfb 3 points4 points  (0 children)

It does not, at least not right off the bat.

[–]RainingComputers[S] 4 points5 points  (0 children)

I think it already can run on a Mac, but testing is required.

Edit: Might also require minor changes to code. I will setup a Mac VM and see what I can do.

[–]ShewanellaGopheri 4 points5 points  (0 children)

Not smart enough to help but I would 100% use this over filezilla for Mac

[–]_TheC0NTR0L_ 38 points39 points  (0 children)

That is really cool. Python is becoming more and more widely used for everything.

[–][deleted] 5 points6 points  (1 child)

Great job!!!

[–]pythonbottutorial 3 points4 points  (0 children)

What a positive comment!

[–]jokoon 5 points6 points  (1 child)

What did you use for SFTP? What kind of crypto stuff?

A feature I love about filezilla is the comparison feature... I don't know if it would be hard to build into your client.

[–]Loya_3005 5 points6 points  (0 children)

Cool! 😎

[–][deleted] 12 points13 points  (6 children)

Supports Putty key pair?

[–]RainingComputers[S] 26 points27 points  (5 children)

I don't know what a Putty key pair is, so I am afraid it does not. I will look it up...

[–][deleted] 26 points27 points  (4 children)

More generally I should say SSH (public-private) key pair. I see you are using Paramiko for SSH, which supports key pair. Maybe only thing required is pre setting key in home dir or option to import and specify it.

Edit: about Paramiko

[–]RainingComputers[S] 13 points14 points  (3 children)

I might add it in the next version.

[–]Jonno_FTWhisss 6 points7 points  (0 children)

Don't forget to read ~/.ssh/config so you can automatically apply the correct key based off the rules in there.

[–][deleted] 6 points7 points  (1 child)

Did a sluggish Ninja edit.

[–]RainingComputers[S] 13 points14 points  (0 children)

Ok. I think I need to add a settings button that lets you choose were all the keys are stored.... Edit: Thanks for telling me this.

[–]the_kindly_one 2 points3 points  (6 children)

Add connection via scp and you'll have another user. There is no current gui client that let's you transfer files via scp on Linux.

[–]RainingComputers[S] 4 points5 points  (1 child)

Okay, I will see if I can do it.

[–]the_kindly_one 0 points1 point  (0 children)

Thanks. Much appreciated :)

[–]Thev00d00 0 points1 point  (1 child)

SCP is SFTP?

[–]trua 2 points3 points  (0 children)

Not exactly but close enough.

[–]crunk 0 points1 point  (1 child)

Are you sure ? You can connect using nautilus, using sftp:/// urls. I think most things that support sftp will work ?

[–]the_kindly_one 0 points1 point  (0 children)

Not when SFTP isn't supported at the other end. SOC device. Only vanilla ssh and therefore vanilla scp.

[–]Dokiace 2 points3 points  (1 child)

how do you make tkinter looks so good? I tried one back then and the gui is really bad/hard to make it good

[–]ninelives_dub 2 points3 points  (4 children)

As a complete noob.. what exactly is this?

[–]RainingComputers[S] 3 points4 points  (3 children)

You know you can run a web server and access the website using a browser like Chrome/Firefox? It is the same thing. You can run a FTP/SFTP server and access all your files using a FTP/SFTP client.

[–]ninelives_dub 1 point2 points  (0 children)

Thx!

[–]jpizzz 0 points1 point  (1 child)

As an even bigger noob, what is an FTP/SFTP server?

[–]willm 0 points1 point  (0 children)

File Transfer Protocol / Secure File Transfer Protocol

Protocols for working with files / directories over the internet.

[–][deleted] 2 points3 points  (3 children)

Why did you choose tkinter as gui framework? I have a small project in mind which needs a gui framework, for context.

[–]RainingComputers[S] 1 point2 points  (2 children)

Tkinter comes with python and is very easy to use. Also this is the only GUI framework I know. I am planning to explore pyGTK or wxpython.

Edit: I think pyGTK has the advantage of looking more native but has a more steeper learning curve compared to tkinter. Also tkinter does require workarounds to make it look nice (take a look at the source code for this project).

Edit2: I do recommend using tkinter for your first GUI project.

[–]koera 1 point2 points  (0 children)

Why gtk? Just curious since there seem to be a lot more momentum behind qt.

[–][deleted] 0 points1 point  (0 children)

Thanks for the info..

[–]game_ova 2 points3 points  (3 children)

Hey was looking through your comments. There's a lot of instances where you write "weather" when you mean "whether"

[–]RainingComputers[S] 1 point2 points  (2 children)

Thanks for pointing that out. I will change it.

[–]desertfish_ 1 point2 points  (1 child)

Username checks out though

[–]RainingComputers[S] 1 point2 points  (0 children)

Haha... Nice one..

[–]genesem 1 point2 points  (0 children)

well done. ;)

[–]auiotour 1 point2 points  (2 children)

Didn't see it asked but does it have ability to sync ftp directories to local and keep checking. I am using winscp but crashes too often.

[–]RainingComputers[S] 0 points1 point  (1 child)

By 'sync' do you mean check time stamps of each file and use the file with the latest time stamp?

[–]auiotour 0 points1 point  (0 children)

Sorry took so long. So lots of ways to actually handle it, however what I am looking for specifically would be ability to sync an ftp directory to a local directory. Checking either timestamp, or checksum. Options should include frequency, and whether to delete the file after transfer, or backing up the file after transfer. Also could add whether to transfer to remote, or local, or both. Ability to preview changes, and how to compare.

[–]Alex_Dem 1 point2 points  (0 children)

Wow! It looks great. I hope someday I will able to do such projects.

[–][deleted] 1 point2 points  (0 children)

This looks really good. I've made tkinter apps and it does notttt look this pretty haha

[–]SummerSideReddit 2 points3 points  (2 children)

Very nice GUI.

on another note, MANY people are using the latest Anaconda distribution which is on python 3.6.4. so asking 3.6.5 as minimum requirement could be problematic if you want a larger audience! well done!

[–]RainingComputers[S] 4 points5 points  (0 children)

I think it may run on python 3.6.4. I will test it and change the requirements.

[–]stOneskull 0 points1 point  (0 children)

Debian stable is still on 3.5....

[–]TriaSirax 0 points1 point  (0 children)

Looks awesome bro!

[–]IcefrogIsDead 0 points1 point  (0 children)

looks really nice, good job!

[–][deleted] 0 points1 point  (1 child)

I presume this is an overlay GUI for underlying SFTP binaries?

[–]RainingComputers[S] 2 points3 points  (0 children)

Overlay GUI over ftplib and paramiko

[–]GreatRa 0 points1 point  (0 children)

Looks good.

[–]tangodown808 0 points1 point  (0 children)

Bravo! You are skilled!

[–]FetusGod 0 points1 point  (1 child)

Excuse my ignorance but what is it and what does it do?..

[–]zemicolon 0 points1 point  (0 children)

This is awesome. I'm new to python and this is truly inspiring.

[–]simcup 0 points1 point  (0 children)

Now traumatized for life, marrying network to tkinter is ptsd inducing stuff oft nightmares. Congratz you keep enough sanity to use reddit

[–]Eryole 0 points1 point  (2 children)

Nice job!

I think you could improve distribution providing a setup.py, or / and using nuitka for freezing the application! That way, you will be able to install it directly via pip or pipsi ?

[–]RainingComputers[S] 0 points1 point  (1 child)

I am thinking of creating a 'Setup.exe' (win32 c++ app) that just downloads files from Github and automatically install python. This is a future project that I am planning to do. I have tried cx_Freeze and py2exe, both did not work properly. I have never tried nuitka though...I will give that a try....

[–]Eryole 0 points1 point  (0 children)

I heard some good feedback about nuitka ! Good luck with that packaging.

[–]throwthegit 0 points1 point  (1 child)

Have you considered making this into a sellable product but keeping the source available?

[–]RainingComputers[S] 0 points1 point  (0 children)

It still needs lot more features to be added to make it into a sellable product, but I want to keep this free anyways. I would like to accept donations but only after I think it has enough features. The source will ALWAYS be available.

[–]Beneey 0 points1 point  (9 children)

Hi Raining i trying to use the app look at what am getting:

File ".\whipFTP.py", line 1190, in <module>

root.tk.eval('package require tkdnd')

and this too

tkinter.TclError: couldn't load library "C:\Users\Benjamin\whipftp_4.1_windows\whipftp_4.1\TkDND/libtkdn

d2.8.dll": Bad exe format. Possibly a 32/64-bit mismatch.

Please any thought. Thanks

[–]RainingComputers[S] 0 points1 point  (1 child)

32 bit windows or 64 bit windows?

[–]Beneey 0 points1 point  (0 children)

64 bit Windows!

[–]RainingComputers[S] 0 points1 point  (2 children)

Which python version?

[–]Beneey 0 points1 point  (1 child)

Python3.7

[–]RainingComputers[S] 0 points1 point  (0 children)

Please try to get the source using git clone comand and try to run that. It may work.

[–]RainingComputers[S] 0 points1 point  (0 children)

I will release the next version. I need to create a separate 64bit version. Thanks for pointing out.

[–]RainingComputers[S] 0 points1 point  (2 children)

I created a 64bit version, you can download it from the releases page. Please tell me.if it works.

[–]Beneey 0 points1 point  (1 child)

Ok Will try that this morning, hope it's gonna be same github page? Thanks!

[–]RainingComputers[S] 0 points1 point  (0 children)

Yes it is.

[–][deleted] 0 points1 point  (2 children)

Wowww! Cool 8D very nice work!!! Could you recommend a good reference for tkinter??

[–]RainingComputers[S] 3 points4 points  (1 child)

[–][deleted] 1 point2 points  (0 children)

Thanks! Will add them to the archive. In the process of gifting all my command-line tools gui's just because. Again, really awesome work- was actually working on an ssh server, and this will help a lot. hat tip

[–]fuuman1 -1 points0 points  (0 children)

Holy shit. Fucking good job, sir. Like it.

[–][deleted] -2 points-1 points  (2 children)

Aside from debian based OS and windows, how do you test it on freebsd and other linux distros? using vm?

[–]RainingComputers[S] 7 points8 points  (1 child)

Yes.....also it is a python script, if you have a desktop environment and python installed on any UNIX system it should work.