minecraft-py / minecraft

A Minecraft-like game written in python3
GNU General Public License v3.0
157 stars 25 forks source link

修复了由于路径中含有空格而无法安装的错误 #33

Closed chufeng-official closed 2 years ago

chufeng-official commented 2 years ago

形如"C:\Program Files\Python310\python.exe" -m pip install -U -r C:\Users\chufeng\Saved Games\minecraft\requirements.txt是无法正常运行的,有两个原因:

  1. 就算C:\Program Files\Python310\python.exe整体加了双引号,仍然会报C:\Program的错,具体原因不明,解决方法就是只给有空格的文件或文件夹加引号,变成这样:C:\"Program Files"\Python310\python.exe
  2. -r 后边的参数是给 pip 用的字符串,所以既不能用上面的方法,也不能直接写上去,所以需要加上双引号,防止空格被识别为命令分隔符 最后会生成这样的命令:C:\"Program Files"\Python310\python.exe -m pip install -U -r "C:\Users\chufeng\Saved Games\minecraft\requirements.txt" 这样就能正常安装了
zhengxyz123 commented 2 years ago

我承认应该给requirements.txt的绝对路径加上引号。

但是关于Windows下的可执行文件是否要加引号嘛,我自己在Windows下试过,整个安装程序可顺利运行。

如若阁下的方案可行,那也只适用于Windows系统(128行处限定了路径分隔符)。

但是怎么想都应该是这样子的才对:

>>> import shlex
>>> shlex.split('path/have/a space')
['path/have/a', 'space']
>>> shlex.split('path/have/"a space"')
['path/have/a space']
>>> shlex.split('"path/have/a space" --args')
['path/have/a space', '--args']
zhengxyz123 commented 2 years ago

该问题已解决,使用subprocess.run代替os.system即可:

code = subprocess.run([executable, "-m", "pip", "install", "-U", "-r", get_file("requirements.txt")]).returncode