ユーザーからの入力を受けてから、セレンを使ってスクレイピングする簡単なプログラムがあります。ユーザーにはPython環境がインストールされていないので、* .exeに変換したいと思います。私は通常cx_freezeを使っています。私は.pyプログラムを.exeに変換しました。最初は、いくつかのモジュール(lxmlなど)が欠けていましたが、解決できました。今私はdocxパッケージに問題があると思う。cx_freezeとdocx - フリーズ時の問題
これは私が私のプログラムで新しい文書(私はこれが私の問題を引き起こすものであると思います)を開始する方法である:正常に動作しますが、私はexeファイルに変換するときに私が取得私はPythonのすべてからそれを実行すると
doc = Document()
#then I do some stuff to it and add paragraph and in the end...
doc.save('results.docx')
をこのエラーは:私はと考え
from cx_Freeze import setup, Executable
executable = Executable(script = "tribunalRio.py")
# Add certificate to the build
options = {
"build_exe": {'include_files' : ['default.docx'],
'packages' : ["lxml._elementpath", "inspect", "docx", "selenium"]
}
}
setup(
version = "0",
requires = [],
options = options,
executables = [executable])
:これは私のsetup.pyプログラム
Traceback (most recent call last):
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
exec(code, m.__dict__)
File "tribunalRio.py", line 30, in <module>
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\docx\api.py", line 25, in Document
document_part = Package.open(docx).main_document_part
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\docx\opc\package.py", line 116, in open
pkg_reader = PackageReader.from_file(pkg_file)
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\docx\opc\pkgreader.py", line 32, in from_file
phys_reader = PhysPkgReader(pkg_file)
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\docx\opc\phys_pkg.py", line 31, in __new__
"Package not found at '%s'" % pkg_file
docx.opc.exceptions.PackageNotFoundError: Package not found at 'C:\Users\tyszkap\Dropbox (Dow Jones)\Python Projects\build\exe.win-a
md64-3.4\library.zip\docx\templates\default.docx'
ある
パッケージにdefault.docxを明示的に追加すると問題が解決します(私はlibrary.zipに追加しようとしましたが、さらにエラーが出ます)。私はこの postを見てきましたが、私は、彼らが何を意味知っていない:copying the docx document.py module inside my function (instead of using Document()
任意のアイデア?私は凍結が最善の解決策ではないことを知っているが、私は本当にこのような単純なプログラムのためのWebインターフェイスを構築したくない...
EDIT:
私はちょうどthis solutionを試してみました:
def find_data_file(filename):
if getattr(sys, 'frozen', False):
# The application is frozen
datadir = os.path.dirname(sys.executable)
else:
# The application is not frozen
# Change this bit to match where you store your data files:
datadir = os.path.dirname(__file__)
return os.path.join(datadir, filename)
doc = Document(find_data_file('default.docx'))
しかし、再び受信トレースバックエラー(ただし、ファイルが...この場所にある):私は間違って何をやっている
Traceback (most recent call last):
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
exec(code, m.__dict__)
File "tribunalRio.py", line 43, in <module>
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\docx\api.py", line 25, in Document
document_part = Package.open(docx).main_document_part
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\docx\opc\package.py", line 116, in open
pkg_reader = PackageReader.from_file(pkg_file)
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\docx\opc\pkgreader.py", line 32, in from_file
phys_reader = PhysPkgReader(pkg_file)
File "C:\Users\tyszkap\AppData\Local\Continuum\Anaconda3\lib\site-packages\docx\opc\phys_pkg.py", line 31, in __new__
"Package not found at '%s'" % pkg_file
docx.opc.exceptions.PackageNotFoundError: Package not found at 'C:\Users\tyszkap\Dropbox (Dow Jones)\Python Projects\build\exe.win-a
md64-3.4\default.docx'
?
期待していることを確認するには、docxパッケージのコードを調べる必要があります。あなたは問題に直面しているかもしれませんが、それが幸せになる前にあなたが達成する必要があるもう一つの期待があります。 :-) –
凍結は本当に痛みです...:D – pawelty
はい、そうです。 *特に、*これらのパッケージを書くことは決して凍結することには関係せず、ファイルがディスク上のどこに置かれているかを前提にしています。 –