Closed chufeng-official closed 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']
该问题已解决,使用subprocess.run
代替os.system
即可:
code = subprocess.run([executable, "-m", "pip", "install", "-U", "-r", get_file("requirements.txt")]).returncode
形如
"C:\Program Files\Python310\python.exe" -m pip install -U -r C:\Users\chufeng\Saved Games\minecraft\requirements.txt
是无法正常运行的,有两个原因:C:\Program Files\Python310\python.exe
整体加了双引号,仍然会报C:\Program
的错,具体原因不明,解决方法就是只给有空格的文件或文件夹加引号,变成这样:C:\"Program Files"\Python310\python.exe
-r
后边的参数是给 pip 用的字符串,所以既不能用上面的方法,也不能直接写上去,所以需要加上双引号,防止空格被识别为命令分隔符 最后会生成这样的命令:C:\"Program Files"\Python310\python.exe -m pip install -U -r "C:\Users\chufeng\Saved Games\minecraft\requirements.txt"
这样就能正常安装了