2016-02-05 73 views
0

所以这是一个奇怪的一个... 我承认,我安装我自己的模块无法摆脱鬼模块的

  • 蟒蛇的野生混合的setup.py安装
  • 蟒蛇setup.py开发
  • pip安装。
  • pip install -e。

但我不能识别在使用'pip卸载'并手动删除任何剩余的蛋或蛋链接,甚至* .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去一些隐藏的文件路径我得到最奇怪的错误,即使谷歌只看过几次,至少与删除一个包:

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 

有人有什么想法我可以尝试吗?

回答

1

打开Python提示符

import sys 

for p in sys.path: 
    print p 

这会给你一个目录列表。请查看所有这些目录或文件名称为planet4。也可以查找任何.pth文件。如果你找到了,用文本编辑器打开它们,它们会给你更多的目录来查找,漂洗和重复。

+0

那里有很多,所以我先避开了它。但后来我在那里看到了一个意外的文件夹,并想到了我过去使用PYTHONPATH的经验并进行了进一步调查。正如我在我的文章中写的,我确实检查了.pth文件。 –

+0

我仍然给你答案,最后是b/c,如果指向模块的指针没有告诉你自己,这是真正实现它的唯一方法。 –

-1

呻吟,所以很显然,PYTHONPATH(我没有因为长时间不再使用),甚至造成没有一个__init__.py文件中的模块名称空间中的文件夹条目。 所以,不知道,再加上我不记得我仍然有一个定义的PYTHONPATH环境变量的事实,创造了这个难题。

PYTHONPATH真的是万恶之源... :(

UPDATE 所以,虽然这个条目是为什么事情发生了错误在我的具体情况下的答案,公认的答案是我发现它怎么一会在类似案件中找到它。我看着sys.path任何东西腥

+0

最好的解决方案是使用virtualenv并让setup.py自动为您处理PYTHONPATH变量。这样你就不必手动处理它。如果出现错误,您也可以快速重新创建virtualenv并重新创建 – Greg

+0

我正在使用virtualenvs,但仍旧在加载的旧.zshrc文件中设置了PYTHONPATH。为什么downvote?我正确地指出PYTHONPATH设置不好。 –

+0

我没有downvote。其他人做了。 PYTHONPATH是非常可怕的,我完全同意。 – Greg