gpt4 book ai didi

python - 属性错误 : 'module' object has no attribute '__file__' (own module installed using pip)

转载 作者:行者123 更新时间:2023-11-28 18:24:16 25 4
gpt4 key购买 nike

我们有一个使用 python setup.py sdist 构建的 Python 2 模块, 然后部署到远程机器并使用 pip install mymodule.tar.gz 安装在 virtualenv 中.

问题是:在一台机器上生成的模块知道它自己的文件路径 __file__ ,而在另一台机器上则没有。测试用例是这样的:

python -c "import mymodule; print(mymodule.__file__)"

在一台机器上,它正确地打印了到 virtualenv “site-packages” 中某个位置的完整路径。在另一台非常相似的机器上它提出:

AttributeError: 'module' object has no attribute '__file__'

(有问题的机器是运行 Ubuntu 14.04 的 AWS EC2 节 pip 。)

尝试使用 pkg_resources 解析路径时出现问题 python -c "import pkg_resources; print(pkg_resources.resource_filename('mymodule', 'migrations'))" - 这应该给出模块代码的完整路径,但在有问题的机器上无法正确解析。

我在 shell 环境、pip 安装的软件包集或 pip 安装后的“mymodule”文件系统中看不到任何差异。我有 cd编辑到一个空文件夹以确保我没有从 cwd 导入任何内容。

我可以调查哪些差异来追踪此问题?我怎样才能确保我的 pip install安装一个知道其文件路径的包?

最佳答案

问题的根源实际上是我们安装了两个模块,而 Python 似乎有顺序歧义。我们将这两个模块设计并安装为单独的代码库:

mymodule
mymodule.crazything

换句话说,后者是一个独立的包,在mymodule中添加了一个子模块。这意味着当编译后者时,它会创建一个没有内容的虚拟 mymodule

安装这两个包时,会安装两个单独的 mymodule 模块。当您运行 import mymodule 时,将使用其中的哪一个?据我所知,这是 Python 未定义的,它在本地是一致的,但在机器之间不一致。

我们的解决方案是:不要创建包含子模块的单独包。相反,我们为它们提供不会冲突的单独模块标识。

关于python - 属性错误 : 'module' object has no attribute '__file__' (own module installed using pip),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42514834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com