我正在尝试运行virtualenv并通过pip在本地安装包。当运行下面的例程时,没有给出任何输出来指示它失败的原因。我正在尝试做一些类似于以下的事情
source env/bin/activate
(env) pip install [packages]
我可以用Popen("source env/bin/activate && pip install package", shell=True)
来做,但希望以我在日常生活中定义的方式来处理它。
有什么想法吗?
def install_pkgs(self):
proc = subprocess.Popen(["source %s" % (os.path.join(self._commons['dst_dir'], 'env/bin/activate'),)],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
shell=True,
executable='/bin/bash')
proc.stdin.write(str.encode("pip install --upgrade %sn" % (" ".join(self._loaded_packages),)))
output, error = proc.communicate()
print(output)
print(error)
要获取stderr
,您应该指定stderr=subprocess.PIPE
或stderr=subprocess.STDOUT
(将其重定向到stdout)。
要安装/升级软件包,您可以尝试:
subprocess.check_call(['/path/to/virtualenv/bin/pip', 'install', '-U'] + packages)