不使用lzma的Python 2.7提取.xz文件(在Windows上)

时间:2018-08-02 13:51:17

标签: python python-2.7 lzma

我有一个程序,需要解压缩.xz压缩档案How to decompress a .xz file which has multiple folders/files inside, in a single go?。 我已经读到可以通过pip install pyliblzma使用lzma来实现,但是在Windows上通过pip安装时似乎已经中断了。

Collecting pyliblzma
Using cached https://files.pythonhosted.org/packages/17/48/5292ade507dafe573360560ba53783395587dc42eb32b347feb2ac70fc6b/pyliblzma-0.5.3.tar.bz2
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "c:\users\ben\appdata\local\temp\pip-install-_hmrno\pyliblzma\setup.py", line 48, in <module>
    shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True).stdout.read():
  File "c:\python27\lib\subprocess.py", line 347, in __init__
    raise ValueError("close_fds is not supported on Windows "
ValueError: close_fds is not supported on Windows platforms if you redirect stdin/stdout/stderr

我也尝试过pip install pylzma,但这需要用于Python的Visual Studio C ++编译器 building 'pylzma' extension error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27

由于我的程序是可移植的,并且在用户之间共享,因此我想尽量避免让他们安装单独的二进制文件以供程序使用。

是否有另一种无需使用lzma即可在Python2.7中严格执行.xz档案的方法,还是通过pip install获得lzma的工作版本的方法?

1 个答案:

答案 0 :(得分:0)

我设法通过使用便携式版本的7zip并使用其命令行界面来提取文件来解决问题。

params = ["7zG.exe", "x", "my_filename.xz", "-ooutputdir\\"]
p = Popen(params, stdout=subprocess.PIPE)