gif-for-cli icon indicating copy to clipboard operation
gif-for-cli copied to clipboard

Windows cmd.exe and Powershell support

Open paritosh149 opened this issue 6 years ago • 12 comments

How can this be run on Windows cmd.exe and Powershell?

paritosh149 avatar Jun 15 '18 06:06 paritosh149

I'm not sure, it'll likely require changes to run in a Windows env. From what I've read, cmd.exe may not support ANSI escape codes before Windows 10, and in Windows 10 you may need to configure ANSI support yourself.

SeanHayes avatar Jun 15 '18 21:06 SeanHayes

Ok. But Powershell does support ANSI escape codes. Check https://github.com/PoshCode/Pansies.

paritosh149 avatar Jun 16 '18 02:06 paritosh149

Ok. Have you tried installing or using on Windows? What errors did you get?

SeanHayes avatar Jun 16 '18 05:06 SeanHayes

Please specify the steps to install the dependencies on Windows.

paritosh149 avatar Jun 17 '18 05:06 paritosh149

According to the code dependencies are installed by setup.py clone the repository cmd or powershell with : git clone https://github.com/google/gif-for-cli.git

Change directory to gif-for-cli : cd gif-for-cli

Then install the dependencies using setup.py: python setup.py install

Bgumel avatar Jun 18 '18 14:06 Bgumel

If you do that you'll end up with:

Traceback (most recent call last): File "setup.py", line 33, in os.symlink('../third_party', symlink_path) AttributeError: 'module' object has no attribute 'symlink'

GarethWright avatar Jun 18 '18 14:06 GarethWright

Due to some peculiarities with the way Python packing works, the install script has to temporarily create a symbolic link to that dir. It'll probably have to change for Windows.

If you guys want to work on a PR for Windows support it would be much appreciated. :)

SeanHayes avatar Jun 18 '18 17:06 SeanHayes

Why is a symbolic link needed for third party dependencies at all. Can't it just be packaged as a single folder?

paritosh149 avatar Jun 19 '18 05:06 paritosh149

I needed to include a font for the export feature, and it's Google policy to put all 3rd party code in the third_party dir. I tried a number of different ways, but I couldn't get that directory to consistently be included in the .whl and .tar.gz distributions. The best way to ensure the needed files would be available after install was to make it a Python module, but I didn't want third_party to be a top level module name, as it's too generic, I wanted it to be gif_for_cli.third_party. After several failed attempts to map the third_party dir to that module name, it seemed the easiest/only way was to just add a temporary symlink.

SeanHayes avatar Jun 19 '18 07:06 SeanHayes

Seems a bit daft but I guess you could add Windows support for symlink...though that would require an elevated command prompt to install.

if os.name == "nt": def symlink_ms(source, link_name): import ctypes csl = ctypes.windll.kernel32.CreateSymbolicLinkW csl.argtypes = (ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_uint32) csl.restype = ctypes.c_ubyte flags = 1 if os.path.isdir(source) else 0 try: if csl(link_name, source.replace('/', '\\'), flags) == 0: raise ctypes.WinError() except: pass os.symlink = symlink_ms

GarethWright avatar Jun 19 '18 09:06 GarethWright

As per Windows 10 Creators Update, elevated command prompt is not mandatory anymore to create symlinks. Refer, this.

paritosh149 avatar Jun 20 '18 06:06 paritosh149

Linux subsystem on Windows works with this at present.Type bash in cmd.exe (yeah it's still in cmd.exe) and deploy it like Linux.

cybort avatar Jun 21 '18 03:06 cybort