pip 安装与本地包具有相同命名空间的包

2024-04-29

我使用的是 Python 3.6.5,通过 miniconda 安装。我的问题是由于我正在安装一个与本地包具有相同命名空间的包。 pip 安装此包后,我无法再从本地包导入。我收到一个ModuleNotFoundError错误。如果可能的话,命名空间需要保持这种方式。

这是我的目录结构:

/root
  stuff
    - __init__.py
    - my_stuff.py
  app.py

init.py

__import__('pkg_resources').declare_namespace(__name__)

app.py

from stuff.my_stuff import my_fun

这工作正常,直到我 pip 安装具有相同名称空间“stuff”的包。 pip 安装包后,导入语句,from stuff.my_stuff import my_fun抛出以下错误:ModuleNotFoundError: No module named 'stuff.my_stuff'。我有点明白为什么了。在Python中导入模块时,它会首先查找内置模块,然后是sys.path、PYTHONPATH等......

这是真正让我困惑的部分。如果我创建另一个任意本地模块,例如some_stuff, 如下所示:

/root
  stuff
    - __init__.py
    - my_stuff.py
  some_stuff
    - __init__.py
    - more_stuff.py
  app.py

如果我然后运行:

app.py

from some_stuff.more_stuff import more_fun
from stuff.my_stuff import my_fun

一切都按预期进行。即如果我导入some_stuff.more_stuff before stuff.my_stuff,一切正常。但反之则不然。独家进口stuff.my_stuff导致ModuleNotFoundError.

app.py

# The code above works, but this causes the error
from stuff.my_stuff import my_fun

是什么导致了这种行为?如何解决本地引用与 pip 安装的名称空间相同的包的问题?

Edit:

我继续试验并注意到当我删除所有__init__.py文件,一切都按预期进行。我遇到了这个post https://stackoverflow.com/questions/37974843/why-can-i-import-successfully-without-init-py:从Python 3.3开始,一个没有后缀的文件夹__init__.py可以被视为隐式名称空间包的一部分。但我仍然对上面提到的行为感到困惑。


This 所以问题 https://stackoverflow.com/questions/27308293/how-to-install-python-package-with-a-different-name-using-pip#55817170应该回答你的问题

为了方便起见,我仍然把原来的答案放在这里。


无法通过指定 pip 参数来更改“导入路径”(安装名称)。但是,您可以在安装后对软件包进行一些更改:

  • use pip install -e git+http://some_url#egg=some-name这样,即使两个包具有相同的导入路径,它们也会保存在不同的目录下(使用#egg=后面提供的一些名称)。之后,您可以转到包的源目录(通常是venv/src/some-name)并重命名一些文件夹以更改导入路径

  • 分叉存储库,进行更改,然后从该存储库安装软件包。或者您可以使用不同的名称在 PyPI 上发布包并按该名称安装它

  • use pip download将其中一个包放入您的项目中,然后根据需要重命名文件夹

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pip 安装与本地包具有相同命名空间的包 的相关文章

随机推荐

  • lua_resume 的 from 参数的含义

    From Lua 5 2 参考手册 http www lua org manual 5 2 manual html lua resume int lua resume lua State L lua State from int nargs
  • 如何修改道路网络的 L 系统?

    向大家问好 我目前正在研究道路网络的程序生成 并偶然发现了 L 系统算法 根据我从有关该主题的各种科学论文以及有关该主题的论文的进一步论文中了解到 算法更改为使用 全局目标和局部约束 其中修改所采取的路径以适应地形等输入值和人口密度 现在我
  • 不使用 renderInContext 捕获 UIView:

    我想从我的屏幕创建视频 为此我将捕获视图 但我不想使用renderInContext 由于某种原因 我现在正在使用drawViewHierarchyInRect 但这仅限于 iOS 7 我的应用程序也支持早期的 iO S 版本 我会因使用而
  • UIViewController 中的 Xcode 5.1 UITableView - 自定义 TableViewCell 出口为零

    我有一个 UITableView 作为 UIViewController 中的子视图 我没有使用 UITableViewController 因为我有一些与 tableview 无关的其他内容占据了屏幕的一部分 我正在使用故事板 我将表视图
  • 公开 ASP.NET 用户控件中的复杂属性

    我想从自定义 ASP NET 用户控件公开一个复杂的属性 可以通过aspx页面中的控制标签来设置 像这样的事情 public class TestData public int X public int Y public partial c
  • 阅读 C 语言中的科学记数法

    我正在尝试读取包含以下内容的文件 1 0000000e 01 2 9265380e 03 5 0821200e 02 4 3231640e 01 2 0000000e 01 1 0170240e 04 9 2798610e 02 4 072
  • 无损连接属性

    关系模式中的无损连接属性是什么意思 是否能够在关系分解过程中保持信息 数据的语义 同时进行规范化 The 无损连接属性是归一化支持的分解特征 它能够确保原始关系的任何实例都可以从较小关系中的相应实例中识别出来
  • 消费者关闭了输入通道或发生错误。事件=0x8

    D AndroidRuntime 11752 D AndroidRuntime 11752 gt gt gt gt gt gt AndroidRuntime START com android internal os RuntimeInit
  • C# 检查闰年

    我想将输入日期 1 年添加到名为完成日期的列中 如果输入日期是闰年 我需要添加 364 天 如果不是 365 天的话 有没有办法在 c 中检查这一点 使用当前日期时间年份并操作闰年 不操作 然后添加天数 Thanks 您可以使用日期时间 I
  • getUserMedia 在 chrome 版本 48.0.2560.0 中无法工作,而在 46.0 中工作

    我的困惑是 我在我的页面中使用了 gerUSerMedia 该页面无法在我们的服务器上工作 而在某些机器上 在那些 chrome 浏览器中具有版本为 48 0 2560 0 的 chrome 时 它 将给出以下警告 getUserMedia
  • 从脚本加载调用 Angular 控制器

    我试图在从 onload 回调加载脚本后更新控制器的状态 我加载 Google 客户端 API 然后在 OnLoadCallback 中 我尝试手动引导 AngularJS 并将设置状态设置到我的控制器上 function OnLoadCa
  • Cypress Vue 组件测试从已挂载发出的事件

    我有一个 vue2 组件 它在其安装的生命周期挂钩中发出一个事件 该事件被发出 并且可以由使用该组件的页面处理 但是 我还想测试该事件是否在我的组件测试中发出 该测试使用赛普拉斯组件测试运行程序 这是一个精简版本 组件 TheCompone
  • Rails Heroku 应用程序错误

    我的项目在本地运行良好 我将它部署到 Heroku 我遇到了一些错误 应用程序无法在那里运行 我正在使用 Rails 4 和 postgresql 无法理解为什么会发生这种情况 在我看来 数据库没有创建 我应该在我的database yml
  • 从 C 调用带有字符串参数的 Go 函数?

    我可以从 C 调用一个没有参数的 Go 函数 按照下面的 https github com joeprivacy crefgo hello world 这通过编译go build和打印 Hello from Golang main func
  • 找不到全局类型 CallableFunction

    这是一个基本汇编脚本项目 但我在 tsconfig json 文件中遇到此错误消息 extends assemblyscript std assembly json include ts 这是我的 package json devDepen
  • 如何在 C++/CLI 中转发声明委托?

    How 以下内容无效 delegate MyDelegate ref class MyDelegate delegate void MyDelegate 申报工作如下 public delegate void MyDelegate Obje
  • Intent.ACTION_DIAL 号码以 # 结尾

    所以我尝试通过以下方式发送号码Intent ACTION DIAL以 结尾 例如 123 但是当Android Dialer应用程序启动时 只有 123 不见了 我正在使用以下代码来触发 Android 的拨号应用程序 Uri number
  • 如果文本框不为空,如何添加并显示工具提示文本框 WPF

    需要显示提示 其中包含文本字段中的数据 文本框有数据时出现提示 只需使用绑定到 ToolTipService 附加属性即可 XAML
  • API 27 中 startActivityForResult 后崩溃

    更新到 API 27 和支持库 27 0 2 后 我突然在 Crashlytics 中得到了很多这样的堆栈跟踪 Fatal Exception java lang IllegalArgumentException at android os
  • pip 安装与本地包具有相同命名空间的包

    我使用的是 Python 3 6 5 通过 miniconda 安装 我的问题是由于我正在安装一个与本地包具有相同命名空间的包 pip 安装此包后 我无法再从本地包导入 我收到一个ModuleNotFoundError错误 如果可能的话 命