错误 Python 包组织在我的路径中安装了 `tests` 包? (蟒蛇)
Bad Python package organization installed a `tests` package to my path? (Anaconda)
不知何故(由于一些糟糕的建议)我相信已经 bitten by using a 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
"package"? 我正在使用 Anaconda 4.3(最新版本)。 pip uninstall tests
没有成功。
注意:我的项目也已经发布到pypi(项目名称:parmatter),我确实从那里安装了一次作为测试,但只是在使用修改后的项目组织结构之后,所以我不认为这个是原因。如果有人想安装它并查看它是否会导致同样的问题,那至少可以帮助我确定原因。
项目回购:https://github.com/Ricyteach/parmatter
编辑
下面 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()
帮手。
我安装了你的v0.0.5版本,问题不在那个版本。 Python 2 的分发已损坏,您应该在 setup.py
设置调用中包含 python_requires='>=3'
,以便生成适当的元数据以防止 pip 尝试将其安装在 Python 上2.
不知何故(由于一些糟糕的建议)我相信已经 bitten by using a 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
"package"? 我正在使用 Anaconda 4.3(最新版本)。 pip uninstall tests
没有成功。
注意:我的项目也已经发布到pypi(项目名称:parmatter),我确实从那里安装了一次作为测试,但只是在使用修改后的项目组织结构之后,所以我不认为这个是原因。如果有人想安装它并查看它是否会导致同样的问题,那至少可以帮助我确定原因。
项目回购:https://github.com/Ricyteach/parmatter
编辑
下面 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()
帮手。
我安装了你的v0.0.5版本,问题不在那个版本。 Python 2 的分发已损坏,您应该在 setup.py
设置调用中包含 python_requires='>=3'
,以便生成适当的元数据以防止 pip 尝试将其安装在 Python 上2.