Полагаю, у меня очень простая проблема, но на самом деле я застрял в том, чтобы выяснить, где именно проблема.
Моя задача - запустить скрипт Python из Total Commander (T C) командная строка с именем файла в качестве аргумента.
Я использую Python 3.7.4. Анаконда связана в моих переменных окружения, а файлы * .py связаны в T C:
Код теста:
from docx import Document
from sys import argv
inputfilename = argv[1]
document = Document()
document.save(str(inputfilename) + '_test.docx')
Появляется следующее сообщение об ошибке:
n:\TECHNOLOGY\Products\00_00_ALL_Product\Lasten\_Parafix\3.XM-NES\8.20_Euros\_De
finition_Validierung_Tower>test.py test
Traceback (most recent call last):
File "N:\TECHNOLOGY\Products\00_00_ALL_Product\Lasten\_Parafix\3.XM-NES\8.20_E
uros\_Definition_Validierung_Tower\Test.py", line 8, in <module>
from docx import Document
File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\__init__.py", line 3, in <module>
from docx.api import Document # noqa
File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\api.py", line 14, in <module>
from docx.package import Package
File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\package.py", line 9, in <module>
from docx.opc.package import OpcPackage
File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\opc\package.py", line 9, in <module>
from docx.opc.part import PartFactory
File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\opc\part.py", line 12, in <module>
from .oxml import serialize_part_xml
File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\opc\oxml.py", line 12, in <module>
from lxml import etree
ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden.
На самом деле в указанной папке нет такого файла o xml .py.
Тем не менее, когда я запускаю код без аргументов в Spyder :
from docx import Document
from sys import argv
#inputfilename = argv[1]
inputfilename = "TEST"
document = Document()
document.save(str(inputfilename) + '_test.docx')
Документ "TEST_test.docx" создан, поэтому я считаю, что ошибка - это отсутствующая DLL.
Я подозреваю, что Spyder использует другую среду в качестве оболочки команд (к сожалению, У меня было несколько сред). Поэтому я удалил все среды, кроме базовой, с помощью Anaconda Navigator. Так что у меня осталось только базовое окружение. Код работает без аргументов от Spyder, но не с аргументами из командной строки T C.
Еще одна странная вещь, которую я не понимаю, это когда я вызываю Python .exe из T C командная строка:
Python 3.7.4 (default, Aug 9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Ana
conda, Inc. on win32
Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation
Когда я вызываю 'python .exe' из Anaconda Prompt, все выглядит нормально:
(base) C:\>python.exe
Python 3.7.4 (default, Aug 9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Ana
conda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
Когда я могу активировать базовую среду из оболочки Cmd ( запускается с T C) и вызывает скрипт в командной оболочке, он как-то работает, но не так, как ожидалось (я добавил 'print (argv)' в код):
(base) n:\TECHNOLOGY\Products\00_00_ALL_Product\Lasten\_Parafix\3.XM-NES\8.20_Eu
ros\_Definition_Validierung_Tower>Test.py TEST2
['N:\\TECHNOLOGY\\Products\\00_00_ALL_Product\\Lasten\\_Parafix\\3.XM-NES\\8.20_
Euros\\_Definition_Validierung_Tower\\Test.py']
Кажется, что только первый аргумент (сам скрипт) найден. Но не "TEST2".
Тем не менее, из командной строки T C ответ остается прежним: o xml .py DLL не найдена ...
Кто-нибудь Идея, как заставить T C запустить python в правильной среде и прочитать мои аргументы? Огромное спасибо заранее!
Пожалуйста, дайте мне сейчас, если вам нужна дополнительная информация!
BR Klaus