坏的Python包组织在我的路径上安装了一个“tests”包(水蟒)

2024-05-19 16:35:42 发布

您现在位置:Python中文网/ 问答频道 /正文

不知何故(由于一些不好的建议),我相信已经被我的项目目录的bitten组织usingshoddy

现在看起来是这样(很好!):

\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“包”?我使用的是anaconda4.3(最新版本)pip uninstall tests未成功

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

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

源分布: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中删除项目目录。。。我该怎么做?一开始是怎么做到的


Tags: 项目py目录initlibpackagessetupsite
1条回答
网友
1楼 · 发布于 2024-05-19 16:35:42

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

site-packages目录中找到easy-install.pth文件,然后删除以下开头的所有行:

c:\\users\\username\\projects

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

我安装了您的v0.0.5发行版,问题不再存在于该版本中。Python2的发行版已损坏,您应该在setup.py安装调用中包含python_requires='>=3',以便生成适当的元数据,防止pip尝试在Python2上安装它

相关问题 更多 >