我正在使用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,但没有太大成功......有什么想法吗?
答案 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}}。