Python &引用;Can';t从安装目录获取安装脚本的一致路径";
我正在使用pip从git存储库安装一个包:Python &引用;Can';t从安装目录获取安装脚本的一致路径";,python,pip,setup.py,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 set
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')
我试着看一下这个项目的,但是没有多大成功。。。有什么想法吗?这是因为标志
-e
表示“可编辑”,这与执行python setup.py develope
相同,它创建了一个从
到站点包
目录的符号链接,并且没有运行常规安装
查看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
参考资料:
pyproject.toml
文件。我不知道为什么这会使错误消失,但它是有效的。此文件是的一部分
如果项目中有一个pyproject.toml
,则可以将包放在src
子文件夹中:
/src/yourpackage/__init__.py
/setup.py
/pyproject.toml
我不知道为什么会这样,但是当您运行pip install-e.
以“可编辑”模式安装软件包时,错误消息就会消失。该文件甚至不必包含任何内容,它可以是一个空白文件,错误就会消失
(为了弄清楚这一点,我发现一个正在工作的项目,它的包存储在
src
文件夹下,并一直在删除东西,直到我出现错误。这显然是Pip中的一些错误。我的机器上有Windows 10上针对Python 3.7的18.1版。),以备将来使用,如果您在windows 10上使用的是旧版本的setuptools,并且它看起来有一个额外的斜杠,那么您需要更新python包“setuptools”来解决这个问题
您可以通过多种方式进行更新,但有一种是
python-mpip安装--升级setuptools
在我的例子中,问题在于package_dir={'':'/src'}
:我指定了dir的路径,而不是dir名称,由于某种原因,它在setup.py bdist\u wheel
上运行良好。我的项目有以下结构:
+-- project/
+-- src/
| +-- project/
| +-- __init__.py
+-- doc/
+-- tests/
+-- setup.py
+-- ...
因此,基本上,/src/project
中的所有python代码。这就避免了直接从测试脚本或任何东西中导入项目
setup.py
内容:
setuptools.setup(
...
packages=setuptools.find_packages('src'),
包_dir={'':'src'},
...
)
现在我想把所有这些都拉到下面一个级别,这样整个项目可以有不同的组件,如下所示:
+-- project/
+-- backend/
| +-- src/
| +-- project/
| +-- __init__.py
|
+-- frontend/
| +-- ...
|
+-- doc/
+-- tests/
+-- setup.py
+-- ...
因此,在尝试pip安装-e.
时,即使在尝试修复所有路径之后,我也收到了OP中的错误消息
我在setup.py
中通过以下更新解决了这个问题:
setuptools.setup(
...
packages=setuptools.find_包('backend/src'),
包_dir={'':'backend/src'},
...
)
希望这有帮助 如果我想保留
-e
,这样我就可以指向我的SpiffWorkflow分支并直接对工作副本进行更改,您认为什么是最好的解决方案?您指向的第一个参考使我认为,可以通过将srcdir
添加到python路径来解决这个问题,并且它可以作为setup.py上的第一个操作之一来完成。不过,这似乎不是一个非常优雅的解决方案……我不认为将srcdir
添加到python路径会起作用,因为当您执行import-spiffworkflow
时,python会在pythonpath中查找名为spiffworkflow
的目录,但存在的是名称src
。我不知道这个问题的解决方案,我认为这是一种“反模式”,关于将包目录命名为除设置(name=XXX)
之外的任何其他名称-可能向作者发出请求会更好。如果你找到更好的解决方案,请告诉我。这个问题还没有解决吗?我正在运行setuptools(35.0.2),但仍然出现此错误。移出src后,问题也解决了,当我在src文件夹中保存我的包时,我遇到了这个问题。我使用的解决方法是运行pipenv shell
来创建一个virtualenv,然后我可以毫无错误地运行pip install-e.
。我不知道为什么会这样。我发现如果你在文件夹中放一个空白的pyproject.toml文件,这个错误就会消失。我升级了PIP,但忘了升级setuptools。谢谢你的提醒,效果很好。