问题标签 [name-clash]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python 导入名称冲突
当我有一个包test
时,我习惯于从中导入另一个文件script
:
和图书馆:
只要我不需要任何名称与我的任何脚本对应的库,它就可以工作。发生这种情况时,将加载脚本,而不是库。有没有办法强制本地导入在我使用时使用文件的完整路径?还是有另一种方法来防止名称冲突,而不重命名脚本?
git - 10个十六进制数字git hash缩写就够了吗?
需要多少个可能的哈希值才能避免N
项目之间的冲突?如果你回想生日悖论,答案就比这个小得多N
。
让我们把问题反过来:对于N=16^10
可能的哈希值,它对应于 10 个十六进制数字的缩写 git 修订代码,有多少修订,修订哈希重合的概率上升到 50%?直接计算表明,如果您有 1234603 个修订版本,其中两个具有相同 10 位哈希的概率为 50%。
现在,在大型活动存储库中,一百万左右的修订并非闻所未闻。这里有人在你的工作中经历过 git hash 冲突吗?从理论上讲,这应该发生了。
python - 子文件夹具有相同名称时,Airflow Packaged Dags(压缩)冲突
我们正在建立一个 Airflow 框架,多个数据科学家团队可以在其中协调他们的数据处理管道。我们开发了一个 Python 代码库来帮助他们实现 DAG,其中包括各种包和模块中的函数和类(也包括 Operator 子类)。
每个团队都会将自己的 DAG 与包中的函数和类一起打包在一个 ZIP 文件中。例如,第一个 ZIP 文件将包含
邮编1:
main_dag_teamA.py
子文件夹1:package1-with-generic-functions + init .py
子文件夹2:package2-with-generic-operators + init .py
另一个 ZIP 文件将包含
邮编2:
main_dag_teamB.py
子文件夹1:package1-with-generic-functions + init .py
子文件夹2:package2-with-generic-operators + init .py
请注意,在两个 ZIP 文件中,子文件夹 1 和子文件夹 2 通常完全相同,这意味着完全相同的文件具有相同的功能和类。但随着时间的推移,当新版本的包可用时,包内容将开始在 DAG 包中出现偏差。
通过这种设置,我们遇到了以下问题:当包/子文件夹的内容开始在 ZIP 中出现偏差时,Airflow 似乎不能很好地处理同名包。因为当我运行“airflow list_dags”时,它会显示如下错误:
文件“/data/share/airflow/dags/program1/program1.zip/program1.py”,第 1 行,在 > from subfolder1.functions1 import function1 ImportError: No module named 'subfolder1.functions1'
可以使用以下代码重现问题,其中两个小 DAG 与包 my_functions 一起位于其 ZIP 文件中,该包具有相同的名称,但内容不同。
DAG 包 ZIP 1:
程序1.py
my_functions/functions1.py:
DAG 包 ZIP 2:
程序2.py:
my_functions/functions2.py:
当我运行“airflow list_dags”时,使用这两个 ZIP 文件会显示错误:
文件“/data/share/airflow/dags/program1/program1.zip/program1.py”,第 1 行,从 subfolder1.functions1 导入 function1 ImportError: No module named 'subfolder1.functions1'
当 ZIP 中的子文件夹内容相同时,不会发生错误。
我的问题:如何防止 ZIP 中的子文件夹冲突?我真的很想拥有完全独立于代码的 DAG,并带有自己的软件包版本。
python - 在 Python 中安装包时避免名称冲突
从 PyPI 安装包时,您必须使用项目的名称,这与您将实际导入的顶级包的名称不同。一个明显的例子是pyserial和serial,它们使用以下方式安装:
但两者都与以下内容一起使用:
如果您浏览该site-packages
文件夹,您会看到内容是两个软件包的组合,当然,这些文件会被要安装的最新版本覆盖,从而产生不可预测的结果。
在 Python 中安装包时,有没有办法避免这种名称冲突?想象一下,您想同时使用 pyserial 和 serial,那么您将如何安装它们?
c++ - C++ 多个库定义相同的类名
我正在开发一个项目,其中我有一个供应商库,例如vendor.h
,对于我正在使用的特定 Arduino 兼容板,它定义class HTTPClient
了与 Arduino 系统库的冲突HTTPClient.h
,它也定义了class HTTPClient
.
这两个类除了同名之外没有任何关系,而且 HTTP 客户端的供应商实现能力远不如 Arduino 系统库的实现,所以我更喜欢使用后者。但我不能省略包括前者,因为我需要相当多的vendor.h
. 本质上,我在这里提出了问题,但与类而不是函数有关。我有两者的完整代码,但鉴于一个是系统库而另一个是供应商库,我不愿意分叉和编辑任何一个,因为如果其中任何一个被更新,这会增加大量的合并工作,所以我的偏好是找到一个不编辑任何标题的整洁解决方案。
我尝试了其他 SO 问题中发布的各种解决方案:
- 我不想遗漏任何一个标题,因为我需要
vendor.h
很多东西并且需要HTTPClient.h
客户端实现的功能 - 标题中适当的命名空间可以解决问题,我宁愿避免编辑任何一个标题
- 我尝试将 包装
#include <HTTPClient.h>
在我的命名空间中main.cpp
,但这会导致链接错误,因为它不是仅标头库,因此标头和 cpp 不在同一个命名空间中 - 我尝试了一个简单的包装器,如上面链接的 SO 问题中的函数所建议的那样,其中标头仅包含我的包装器类的前向声明,并且关联的 cpp 包含实际的类定义。这给出了一个编译器错误
error: aggregate 'HTTP::Client client' has incomplete type and cannot be defined
(下面这个尝试的代码示例)
主.cpp:
httpclientwrapper.h:
httpclientwrapper.cpp:
在那个例子中,我不能从头HTTPClient
文件中的类定义中继承,因为这会将重复的类名重新引入我的主程序中的全局命名空间(因此,查看前向声明是否可以解决问题的尝试可能是错误的)。我怀疑我可以通过完全复制HTTPClient
上面的包装类中的类定义而不是尝试使用继承来解决这个问题。然后我会将成员定义添加到我的包装器 cpp 中,它将调用传递给HTTPClient
's 的成员。在我将整个HTTPClient
定义重写(或更可能是复制/粘贴)HTTPClient.h
到我自己的包装器中之前,我想知道是否有更好或更合适的方法来解决冲突?
谢谢你的帮助!
java - 尝试覆盖方法时发生名称冲突
这是我在这里的第一篇文章,但我需要帮助来弄清楚为什么我的子类不允许我覆盖父方法。
我的任务是创建一个具有某些功能的通用二叉搜索树。下一个任务是创建一个通用的 AVL 树,我决定从我的自定义二叉搜索树扩展它以重用代码,并简单地添加使其功能所需的旋转。
但是,当尝试覆盖该方法时,我不断收到名称冲突错误。如果我在我的 AVLTree 类中去掉 Comparable 接口扩展并使我的插入方法通用,我会收到一个参数不匹配错误,说 T 无法转换为 Comparable。
这就是我坚持的地方,如果有人可以提供任何类型的输入,将不胜感激。
第一次尝试:
第二次尝试:
rust - 如何处理导出具有相同名称的符号的板条箱
我想同时使用它们just-argon2
,sodiumoxide
它们分别与Argon2和libsodium绑定。第一个用于密码散列,第二个用于加密等等。
但是,由于 libsodium 本身也包含 Argon2 代码,因此在构建时出现以下链接器错误:
两个库都导出了blake2b_*
Argon2 实现使用的相同符号,因此名称冲突。
现在您可能想知道:为什么不直接使用 libsodium pwhash
API,它在内部使用 Argon2(因此出现链接器错误)?因为我想使用 libsodium 未公开的并行 Argon2,因为它将并行度硬编码为 1。
显然,这些blake2b_*
符号被 标记为ARGON2_LOCAL
,所以它们不是 export,但我想这并不重要,因为它们仍然存在于链接器中。
一种解决方案可能是使用 Argon2 的纯 Rust 实现,例如rust-argon2
,但我测试了一个,不幸的是它慢了很多。
我怎样才能同时使用这两个库?我是否必须仅使用编辑:这不起作用。just-argon2
并导出板条箱提供的功能just-argon2
或类似的东西来制作一个单独的库板条箱,或者那不起作用/有更好的方法吗?
最小非编译程序:
在编写这个程序时,我注意到当我交换use
语句时它编译得很好,但它在运行时崩溃:
这会因STATUS_STACK_BUFFER_OVERRUN
Windows 异常__fastfail(FAST_FAIL_STACK_COOKIE_CHECK_FAILURE)
(显然不同的出口冲突还是什么?
顺便说一句:我对 Rust 很陌生,所以可以肯定地说我不知道它的所有来龙去脉。