Pigar errors when requirements.txt already exists in Windows venv
ssauvageau- opened this issue · comments
Samuel Sauvageau commented
Stack Trace for reference:
(venv) PS C:\Users\Samuel\PycharmProjects\ScorvBot> pigar gen
Traceback (most recent call last):
File "C:\Users\Samuel\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Users\Samuel\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "C:\Users\Samuel\PycharmProjects\ScorvBot\venv\Scripts\pigar.exe\__main__.py", line 7, in <module>
File "C:\Users\Samuel\PycharmProjects\ScorvBot\venv\lib\site-packages\pigar\__main__.py", line 550, in main
cli()
File "C:\Users\Samuel\PycharmProjects\ScorvBot\venv\lib\site-packages\click\core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "C:\Users\Samuel\PycharmProjects\ScorvBot\venv\lib\site-packages\click\core.py", line 1078, in main
rv = self.invoke(ctx)
File "C:\Users\Samuel\PycharmProjects\ScorvBot\venv\lib\site-packages\click\core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Users\Samuel\PycharmProjects\ScorvBot\venv\lib\site-packages\click\core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Users\Samuel\PycharmProjects\ScorvBot\venv\lib\site-packages\click\core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "C:\Users\Samuel\PycharmProjects\ScorvBot\venv\lib\site-packages\pigar\__main__.py", line 326, in generate
os.rename(tmp_requirement_file, requirement_file)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'C:\\Users\\Samuel\\PycharmProjects\\ScorvBot\\requirements.txt.tmp' -> 'C:\\Users\\Samuel\\PycharmProjects\\ScorvBot\\requirements.txt'
Windows offers no guarantee of os.rename() being an atomic operation.
See pydocs for os.rename.
On Windows, if dst exists a FileExistsError is always raised.
Recommended to use one of
- os.replace
- os.remove followed by shutil.move
PS - Thanks for the project. Saving me some headaches otherwise. :)
Xiaochao Dong commented
Try install from the main branch:
pip uninstall pigar
pip install git+https://github.com/damnever/pigar.git@main
Samuel Sauvageau commented
That'll about do it, thank you. :)