【问题标题】:How do I run a setup.py file without being in its directory?如何运行 setup.py 文件而不位于其目录中?
【发布时间】:2021-07-13 23:12:44
【问题描述】:

要安装包含 setup.py 文件的软件包,通常你 cd 进入 setup.py 所在的根目录,然后运行以下命令:

python setup.py install

现在我的问题是我正在为另一个应用程序构建一个插件,虽然我可以通过以下代码安装“普通”包:

subprocess.run([sys.executable, "-m", "pip", "install", package])

我还必须安装几个定制的软件包,如果我尝试这样做:

subprocess.run([sys.executable, "-m", "/MSN-Point-Cloud-Completion-master/emd/setup.py", "install"])

我收到以下错误:Error while finding module specification for 'MSN-Point-Cloud-Completion-master/emd/setup.py' (ModuleNotFoundError: No module named 'MSN-Point-Cloud-Completion-master/emd/setup')

让我烦恼的是,如果我手动 cd 进入目录并简单地从 cmd 运行python setup.py install,它就可以正常工作。

所以问题似乎在于将相对路径传递给 setup.py 文件,但正如我所说,考虑到这是一个插件,我需要从代码中安装 setup.py。有什么解决办法吗?

【问题讨论】:

  • 一个建议是在命令中设置该目录上的 python 路径,即 subprocess.run([sys.executable, "-m", "PYTHONPATH="/MSN-Point-Cloud-Completion-master /emd/", "/MSN-Point-Cloud-Completion-master/emd/setup.py", "install"])
  • 以斜杠开头的路径被解释为绝对路径(从根开始)。试试"MSN-Point-Cloud-Completion-master/emd/setup.py"

标签: python python-3.x


【解决方案1】:

阅读 cmets 让我意识到了一些错误。

首先我意识到在这种情况下我不应该使用-m 标志,这让我可以正确执行setup.py。还删除了路径中多余的斜杠,现在以下工作:

subprocess.run([sys.executable, "MSN-Point-Cloud-Completion-master/emd/setup.py", "install"])

但是,由于我还没有在那个目录中,所以我也收到了以下错误c1xx: fatal error C1083: It is not possible to open file: 'emd_cuda.cu': No such file or directory 并且编译失败。

这绝对解决了所有问题:

import os
import subprocess

os.chdir("MSN-Point-Cloud-Completion-master/emd/")
subprocess.run([sys.executable, "setup.py", "install"])

【讨论】:

    猜你喜欢
    • 2012-04-16
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多