django-admin makemessages PermissionError [WindError 32] and OsError [Errno 22]

105 views
Skip to first unread message

np

unread,
Jun 1, 2017, 12:51:54 PM6/1/17
to Django users
Hi,

I am using custom fabric script to make .po-files for i18n.

The problem is, "django-admin makemessages" keeps on crashing. It also leaves undeleted .html.py files. I can reproduce this error also by using plain "django-admin makemessages -l pt". 

I think this problem in Windows-specific. I am using 64-bit Windows 10, Django 1.11, Fabric3 1.13.1.post1, and Windows Powershell 5.1.14393.1198.

Any help would be appreciated.

Br,

np

"Minimal working example":
 - Crashed on third try. Sometimes it complains about "locale\django.pot" being used by another process, too. Fourth try worked fine.

(<my_project>) PS C:\Users\<User>\Dropbox\<my_project>\site\src\<my_project>\templates\bases> django-admin makemessages -l pt
processing locale pt
(<my_project>) PS C:\Users\<User>\Dropbox\<my_project>\site\src\<my_project>\templates\bases> django-admin makemessages -l pt
processing locale pt
(<my_project>) PS C:\Users\<User>\Dropbox\<my_project>\site\src\<my_project>\templates\bases> django-admin makemessages -l pt
Traceback (most recent call last):
  File "C:\Users\<User>\Miniconda3\Lib\runpy.py", line 184, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Users\<User>\Miniconda3\Lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Python\VirtualEnv\<my_project>\Scripts\django-admin.exe\__main__.py", line 9, in <module>
  File "c:\python\virtualenv\<my_project>\lib\site-packages\django\core\management\__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "c:\python\virtualenv\<my_project>\lib\site-packages\django\core\management\__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "c:\python\virtualenv\<my_project>\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "c:\python\virtualenv\<my_project>\lib\site-packages\django\core\management\base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "c:\python\virtualenv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 360, in handle
    potfiles = self.build_potfiles()
  File "c:\python\virtualenv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 402, in build_potfiles
    self.process_files(file_list)
  File "c:\python\virtualenv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 499, in process_files
    self.process_locale_dir(locale_dir, files)
  File "c:\python\virtualenv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 594, in process_locale_dir
    build_file.cleanup()
  File "c:\python\virtualenv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 157, in cleanup
    os.unlink(self.work_path)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: '.\\base.html.py'
(<my_project>) PS C:\Users\<User>\Dropbox\<my_project>\site\src\<my_project>\templates\bases>

Real-usage example

Fabric code:
def translate(appfolder=None):
    """
    Use django-admin makemessages to make .po files

    INPUTS:
        folder: pathlib.Path object for the folder where to start.
            Used for recursion. (in normal usage, no 'folder' parameter
            is provided.)
    """
    forbidden = ('__pycache__', 'migrations', 'locale', 'utils', 'static')
    if not appfolder:
        appfolder = Path(__file__).parent.parent / '<my_project>'
    for item in appfolder.iterdir():
        if item.is_dir() and (item.name not in forbidden):
            if not (item / 'locale').exists():
                (item / 'locale').mkdir()
                print('Created {}'.format(str((item / 'locale'))))
            print('Running makemessages in {}'.format(str(item)))
            os.chdir(str(item))

            os.system("python {django_admin} makemessages -l fi".format(
                django_admin = django_admin
                ))

            translate(appfolder=item)

Traceback:
- Some files before and after these errors did not produce any errors.

Running makemessages in C:\Users\<User>\Dropbox\<my_project>\site\src\<my_project>\templates
Traceback (most recent call last):
  File "C:\Python\VirtualEnv\<my_project>\Scripts\django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 360, in handle
    potfiles = self.build_potfiles()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 402, in build_potfiles
    self.process_files(file_list)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 499, in process_files
    self.process_locale_dir(locale_dir, files)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 594, in process_locale_dir
    build_file.cleanup()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 157, in cleanup
    os.unlink(self.work_path)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: '.\\account\\account_inactive.html.py'
Running makemessages in C:\Users\<User>\Dropbox\<my_project>\site\src\<my_project>\templates\account
Traceback (most recent call last):
  File "C:\Python\VirtualEnv\<my_project>\Scripts\django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 360, in handle
    potfiles = self.build_potfiles()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 417, in build_potfiles
    with io.open(potfile, 'w', encoding='utf-8') as fp:
OSError: [Errno 22] Invalid argument: 'C:\\Users\\<User>\\Dropbox\\<my_project>\\site\\src\\<my_project>\\templates\\account\\email\\locale\\django.pot'
Running makemessages in C:\Users\<User>\Dropbox\<my_project>\site\src\<my_project>\templates\account\email
Traceback (most recent call last):
  File "C:\Python\VirtualEnv\<my_project>\Scripts\django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 360, in handle
    potfiles = self.build_potfiles()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 402, in build_potfiles
    self.process_files(file_list)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 499, in process_files
    self.process_locale_dir(locale_dir, files)
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 594, in process_locale_dir
    build_file.cleanup()
  File "C:\Python\VirtualEnv\<my_project>\lib\site-packages\django\core\management\commands\makemessages.py", line 157, in cleanup
    os.unlink(self.work_path)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: '.\\email_confirmation_message.txt.py'
Reply all
Reply to author
Forward
0 new messages