错误的 Python 包组织在我的路径上安装了"测试"包?(蟒蛇)



不知何故(由于一些不好的建议)我相信已经被使用我的项目目录的劣质组织咬了。

它目前看起来像这样(好!

projectname
setup.py
LICENSE
MANIFEST.in
README.rst
CHANGELOG.rst
src
projectname
__init__.py
tests
__init__.py
test1.py

但是,它曾经看起来像这样(不好!

package_name
setup.py
LICENSE
MANIFEST.in
README.rst
CHANGELOG.rst
projectname <--- main package at top level
__init__.py
tests
test1.py

在修复我的劣质设置之前,我使用的是项目的可编辑安装(python setup.py develop)。我随后删除了(pip uninstall my_package)多次安装(并重新添加)。

尽管删除了它,但我现在发现我似乎有一个名为tests的软件包可供导入!并且包路径指向我的项目的目录:

>>> import tests
>>> tests.__path__
_NamespacePath(['c:\users\username\projects\projectname\tests'])

我猜这是由于使用初始损坏的软件包组织安装我的软件包而发生的。

如何从我的路径中删除此tests"包"?我正在使用Anaconda 4.3(最新版本)。pip uninstall tests没有成功。

注意:我的项目也已发布到 pypi(项目名称:parmatter),我确实从那里安装了一次作为测试,但只有在使用修改后的项目组织结构之后,所以我认为这不是原因。如果有人想安装它并查看它是否会导致相同的问题,那至少可以帮助我确定原因。

项目回购:https://github.com/Ricyteach/parmatter

来源分布:帕尔斯-0.0.5.tar.gz


编辑

以下python -m site的结果。

C:>python -m site
sys.path = [
'C:\',
'C:\Users\ricky\Anaconda3\python36.zip',
'C:\Users\ricky\Anaconda3\DLLs',
'C:\Users\ricky\Anaconda3\lib',
'C:\Users\ricky\Anaconda3',
'C:\Users\ricky\Anaconda3\lib\site-packages',
'C:\Users\ricky\Anaconda3\lib\site-packages\Sphinx-1.5.6-py3.6.egg',
'c:\users\ricky\projects\parmatter',
'C:\Users\ricky\Anaconda3\lib\site-packages\win32',
'C:\Users\ricky\Anaconda3\lib\site-packages\win32\lib',
'C:\Users\ricky\Anaconda3\lib\site-packages\Pythonwin',
'C:\Users\ricky\Anaconda3\lib\site-packages\setuptools-27.2.0-py3.6.egg',
]
USER_BASE: 'C:\Users\ricky\AppData\Roaming\Python' (doesn't exist)
USER_SITE: 'C:\Users\ricky\AppData\Roaming\Python\Python36\site-packages' (doesn't exist)
ENABLE_USER_SITE: True

看来我需要从site中删除项目目录...我该怎么做?它最初是如何到达那里的?

该问题是由于OP在开发模式下安装旧版本的项目,使用系统Python解释器而不是在venv中(提示:不要这样做)。 这将在easy-install.pth中创建一行,使项目目录在sys.path中可用。

site-packages目录中找到easy-install.pth文件,并删除以如下所示开头的任何行:

c:\users\username\projects

至于你的项目结构,我建议您从测试子目录中删除__init__.py它不是必需的,这意味着如果您使用的是帮助程序find_packages()则必须显式排除tests

我安装了您的 v0.0.5 发行版,但该问题在该版本中仍然存在。 您的发行版在 Python 2 中被破坏了,您应该在setup.py安装程序调用中包含python_requires='>=3',以便生成适当的元数据以防止 pip 尝试在 Python 2 上安装它。

相关内容

  • 没有找到相关文章

最新更新