我们有一个Python 2模块,我们使用python setup.py sdist
构建,然后部署到远程计算机并使用pip install mymodule.tar.gz
安装在virtualenv中。AttributeError:'module'对象没有属性'__file__'(使用pip安装模块)
问题是:在一台机器上,生成的模块知道它自己的文件路径__file__
,而在另一台机器上它不知道。测试用例是这样的:
python -c "import mymodule; print(mymodule.__file__)"
在一台机器它正确打印到的virtualenv“站点包”内的位置的完整路径。在另一个非常类似的机器它提出:
AttributeError: 'module' object has no attribute '__file__'
(该问题的机器运行Ubuntu 14.04 AWS EC2节点)。
问题被视为试图解决使用pkg_resources才能通过的路径时,做 python -c "import pkg_resources; print(pkg_resources.resource_filename('mymodule', 'migrations'))"
- 这应该给模块代码的完整路径,但不能在有问题的机器上正确解析。
我看不到在shell环境中,pip安装的软件包集合或pip安装后的“mymodule”文件系统的差异。我已经cd
编辑到一个空文件夹,以确保我没有从cwd导入任何东西。
我可以调查哪些差异来追踪此问题?我如何确保我的pip install
安装了知道其文件路径的软件包?