不知何故(由于一些不好的建议)我相信已经被使用我的项目目录的劣质组织咬了。
它目前看起来像这样(好!
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 上安装它。