“无法获得从安装目录设置脚本的一致路径”

时间:2012-02-22 19:51:44

标签: python pip setup.py

我正在使用pip从git存储库安装包:

pip install -e git+git://github.com/knipknap/SpiffWorkflow.git@master#egg=SpiffWorkflow-dev

repo被克隆没有问题,但安装失败并显示以下消息:

Running setup.py egg_info for package SpiffWorkflow
Installing collected packages: SpiffWorkflow
Running setup.py develop for SpiffWorkflow
 error: ("Can't get a consistent path to setup script from installation 
  directory", '/', '/home/fcorreia/venvs/myproj/src/spiffworkflow')

我试过看一下该项目的setup.py,但没有太大成功......有什么想法吗?

5 个答案:

答案 0 :(得分:2)

这是因为标记-e表示“可编辑”,并且与python setup.py develop相同,它创建了从<PACKAGE_NAME_LOWERCASE>到您的site-packages目录的符号链接,没有正常安装。

查看SpiffWorkflow的setup.py我可以看到问题依赖的地方:

srcdir = join(dirname(__file__), 'src')
setup(...,
      package_dir      = {'': srcdir})

它表示包内容位于src,而不是spiffworkflow(开发模式预期)。

你可以放弃-e标志并开心:

pip install git+git://github.com/knipknap/SpiffWorkflow.git@master#egg=SpiffWorkflow-dev

参考文献:

答案 1 :(得分:2)

您的软件包中必须有一个pyproject.toml文件。我不知道为什么这会使错误消失,但是它可以工作。该文件是PEP 518 "Specifying Minimum Build System Requirements for Python Projects"的一部分。

如果您的项目中有src,则可以将软件包放在pyproject.toml子文件夹中:

/src/yourpackage/__init__.py
/setup.py
/pyproject.toml

我不知道为什么这样做,但是当您运行pip install -e .以“可编辑”模式安装软件包时,错误消息消失了。该文件甚至不需要任何内容​​,它可以是空白文件,错误消失了。

(要弄清楚这一点,我找到了一个工作项目,该项目的软件包存储在src文件夹下,并不断删除内容,直到出现错误为止。这显然是Pip中的一些错误。我的版本为18.1 Windows 10 for Python 3.7(我的机器上)。

答案 2 :(得分:2)

对于将来的人们,如果您在Windows 10上使用旧版本的setuptools,并且看起来有一个额外的斜线,则需要更新python软件包“ setuptools”以解决此windows 10 python bug < / p>

您可以更新许多方法,但其中一种是python -m pip install --upgrade setuptools

答案 3 :(得分:1)

我的项目具有以下结构:

+-- project/
    +-- src/
    |   +-- project/
    |       +-- __init__.py
    +-- doc/
    +-- tests/
    +-- setup.py
    +-- ...

因此,基本上,/src/project中的所有python代码。这样可以避免将project直接从测试脚本或任何其他内容导入。

setup.py内容:

setuptools.setup(
    ...
    packages=setuptools.find_packages('src'),
    package_dir={'': 'src'},
    ...
)

现在,我想将所有这一级拉到下面,以便整个项目可以具有不同的组件,如下所示:

+-- project/
    +-- backend/
    |   +-- src/
    |       +-- project/
    |           +-- __init__.py
    |
    +-- frontend/
    |   +-- ...
    |
    +-- doc/
    +-- tests/
    +-- setup.py
    +-- ...

因此,即使尝试修复所有路径,我在尝试pip install -e .时也会收到与OP中相同的错误消息。

我通过遵循setup.py中的更新来解决了这个问题:

setuptools.setup(
    ...
    packages=setuptools.find_packages('backend/src'),
    package_dir={'': 'backend/src'},
    ...
)

希望这会有所帮助!

答案 4 :(得分:0)

在我的情况下,问题出在package_dir = {'': './src'}上:我指定了 path 到dir,而不是dir name ,出于某种原因,它与{{ 1}}。