无法摆脱幽灵模块
Can't get rid of a ghost module
所以这是一个奇怪的...
我承认,我安装自己的模块时混合了
- python setup.py 安装
- python setup.py 发展
- pip 安装。
- pip install -e .
但我无法确定在使用 'pip uninstall' 并手动删除任何剩余的鸡蛋或鸡蛋链接,甚至 *.pth 文件中的条目后,导入我的模块 (planet4) 的剩余能力的来源。
我尝试了显而易见的:planet4.__file__
但那是空的:
In [12]: planet4.__file__
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-09c196cdfffe> in <module>()
----> 1 planet4.__file__
AttributeError: module 'planet4' has no attribute '__file__'
Python 仍然认为这是一个模块:
In [16]: type(planet4)
Out[16]: module
当我尝试使用 pkg_resources
访问一些隐藏文件路径时,我得到了最奇怪的错误,甚至 Google 也只见过几次,至少与 [=27] 有关=]删除一个包:
In [10]: import pkg_resources as pr
In [11]: pr.resource_exists('planet4', 'data')
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
<ipython-input-11-3ac559fe861b> in <module>()
----> 1 pr.resource_exists('planet4', 'data')
/Users/klay6683/miniconda3/envs/py35/lib/python3.5/site-packages/setuptools-19.6.2-py3.5.egg/pkg_resources/__init__.py in resource_exists(self, package_or_requirement, resource_name)
1137 def resource_exists(self, package_or_requirement, resource_name):
1138 """Does the named resource exist?"""
-> 1139 return get_provider(package_or_requirement).has_resource(resource_name)
1140
1141 def resource_isdir(self, package_or_requirement, resource_name):
/Users/klay6683/miniconda3/envs/py35/lib/python3.5/site-packages/setuptools-19.6.2-py3.5.egg/pkg_resources/__init__.py in has_resource(self, resource_name)
1603
1604 def has_resource(self, resource_name):
-> 1605 return self._has(self._fn(self.module_path, resource_name))
1606
1607 def has_metadata(self, name):
/Users/klay6683/miniconda3/envs/py35/lib/python3.5/site-packages/setuptools-19.6.2-py3.5.egg/pkg_resources/__init__.py in _has(self, path)
1658 def _has(self, path):
1659 raise NotImplementedError(
-> 1660 "Can't perform this operation for unregistered loader type"
1661 )
1662
NotImplementedError: Can't perform this operation for unregistered loader type
有人知道我可以尝试什么吗?
groan,很明显,PYTHONPATH(我很久没用了)甚至在模块命名空间中为没有 __init__.py
的文件夹创建条目里面的文件。
所以,不知道,加上我不记得我仍然定义了一个 PYTHONPATH 环境变量的事实,造成了这个难题。
PYTHONPATH 确实是万恶之源...:(
更新
因此,虽然此条目是我的特定案例出现问题的答案,但公认的答案是我如何找到它以及在类似案例中如何找到它:我查看了 sys.path
是否有可疑之处。
打开一个python提示符
import sys
for p in sys.path:
print p
这将为您提供一个目录列表。在所有文件中查找名称为 planet4
的目录或文件。还要查找任何 .pth
文件。如果找到任何内容,请在文本编辑器中打开它们,它们将为您提供更多目录供您查找、冲洗和重复。
所以这是一个奇怪的... 我承认,我安装自己的模块时混合了
- python setup.py 安装
- python setup.py 发展
- pip 安装。
- pip install -e .
但我无法确定在使用 'pip uninstall' 并手动删除任何剩余的鸡蛋或鸡蛋链接,甚至 *.pth 文件中的条目后,导入我的模块 (planet4) 的剩余能力的来源。
我尝试了显而易见的:planet4.__file__
但那是空的:
In [12]: planet4.__file__
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-09c196cdfffe> in <module>()
----> 1 planet4.__file__
AttributeError: module 'planet4' has no attribute '__file__'
Python 仍然认为这是一个模块:
In [16]: type(planet4)
Out[16]: module
当我尝试使用 pkg_resources
访问一些隐藏文件路径时,我得到了最奇怪的错误,甚至 Google 也只见过几次,至少与 [=27] 有关=]删除一个包:
In [10]: import pkg_resources as pr
In [11]: pr.resource_exists('planet4', 'data')
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
<ipython-input-11-3ac559fe861b> in <module>()
----> 1 pr.resource_exists('planet4', 'data')
/Users/klay6683/miniconda3/envs/py35/lib/python3.5/site-packages/setuptools-19.6.2-py3.5.egg/pkg_resources/__init__.py in resource_exists(self, package_or_requirement, resource_name)
1137 def resource_exists(self, package_or_requirement, resource_name):
1138 """Does the named resource exist?"""
-> 1139 return get_provider(package_or_requirement).has_resource(resource_name)
1140
1141 def resource_isdir(self, package_or_requirement, resource_name):
/Users/klay6683/miniconda3/envs/py35/lib/python3.5/site-packages/setuptools-19.6.2-py3.5.egg/pkg_resources/__init__.py in has_resource(self, resource_name)
1603
1604 def has_resource(self, resource_name):
-> 1605 return self._has(self._fn(self.module_path, resource_name))
1606
1607 def has_metadata(self, name):
/Users/klay6683/miniconda3/envs/py35/lib/python3.5/site-packages/setuptools-19.6.2-py3.5.egg/pkg_resources/__init__.py in _has(self, path)
1658 def _has(self, path):
1659 raise NotImplementedError(
-> 1660 "Can't perform this operation for unregistered loader type"
1661 )
1662
NotImplementedError: Can't perform this operation for unregistered loader type
有人知道我可以尝试什么吗?
groan,很明显,PYTHONPATH(我很久没用了)甚至在模块命名空间中为没有 __init__.py
的文件夹创建条目里面的文件。
所以,不知道,加上我不记得我仍然定义了一个 PYTHONPATH 环境变量的事实,造成了这个难题。
PYTHONPATH 确实是万恶之源...:(
更新
因此,虽然此条目是我的特定案例出现问题的答案,但公认的答案是我如何找到它以及在类似案例中如何找到它:我查看了 sys.path
是否有可疑之处。
打开一个python提示符
import sys
for p in sys.path:
print p
这将为您提供一个目录列表。在所有文件中查找名称为 planet4
的目录或文件。还要查找任何 .pth
文件。如果找到任何内容,请在文本编辑器中打开它们,它们将为您提供更多目录供您查找、冲洗和重复。