糟糕的Python包组织在我的路径上安装了`tests`包? (Anaconda)的

时间:2017-06-08 20:58:47

标签: python anaconda setuptools pypi

不知何故(由于一些不好的建议)我相信bitten using我的项目目录的shoddy组织。

目前看起来像这样(好!):

\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&#34;包&#34;从我的路径?我正在使用Anaconda 4.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删除项目目录...我该怎么做?它是如何在第一时间到达那里的?

1 个答案:

答案 0 :(得分:1)

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

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

c:\\users\\username\\projects

至于你的项目结构, 我建议您从tests子目录中删除__init__.py这不是必需的,并且意味着如果您正在使用{{},则必须明确排除tests {1}}帮助者。

我安装了您的v0.0.5发行版,问题不会保留在该版本中。您的发行版已针对Python 2中断,您应在find_packages()安装调用中包含python_requires='>=3',以便生成适当的元数据以防止pip尝试在Python 2上安装它。