Python 属性错误:';模块';对象没有属性'__文件';(使用pip安装自己的模块)

Python 属性错误:';模块';对象没有属性'__文件';(使用pip安装自己的模块),python,reflection,pip,Python,Reflection,Pip,我们有一个Python2模块,我们使用Python setup.py sdist构建它,然后部署到远程机器上,并使用pip install mymodule.tar.gz在virtualenv中安装 问题是:在一台机器上,生成的模块知道自己的文件路径,而在另一台机器上则不知道。测试用例如下所示: python-c“导入mymodule;打印(mymodule.\uuuu文件)” 在一台机器上,它可以正确打印到virtualenv“站点包”中某个位置的完整路径。在另一台非常类似的机器上,它引发:

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

问题是:在一台机器上,生成的模块知道自己的文件路径,而在另一台机器上则不知道。测试用例如下所示:

python-c“导入mymodule;打印(mymodule.\uuuu文件)”

在一台机器上,它可以正确打印到virtualenv“站点包”中某个位置的完整路径。在另一台非常类似的机器上,它引发:

AttributeError:'module'对象没有属性'\u文件'

(讨论中的机器是运行Ubuntu 14.04的AWS EC2节点。)

当尝试通过执行以下操作来使用pkg_资源解析路径时,发现了此问题
python-c“导入pkg\u资源;打印(pkg\u资源.资源\u文件名('mymodule','migrations')”)”
-这应该提供模块代码的完整路径,但不能在有问题的机器上正确解决

我看不出shell环境、pip安装的包集或pip安装后“mymodule”的文件系统有什么不同。我已将
cd
ed放入一个空文件夹,以确保我没有从cwd导入任何内容


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

对我们来说,问题的根源实际上是我们安装了两个模块,而Python似乎具有排序模糊性。我们将这两个模块作为单独的代码库进行设计和安装:

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

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

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