我正在开发一个简单的 python 包(在 macOS 10.14 上),但在设置如何安装它的说明时遇到问题。目前该包尚未在任何地方可用,但可以将其视为虚拟“hello world”包,在虚拟“hello world”模块内具有虚拟“hello world”函数。当然,它有一个正确的 setup.py 脚本,允许用户使用 pip
安装和卸载软件包。
当我自己安装并测试它时,一切正常,问题与包本身无关。
问题是我无法使 conda 虚拟环境和 pip 一起工作...在我的 setup.py 脚本旁边有一个environment.yaml 文件,它指定了我的包所需的依赖项。基于此文件,我创建了一个虚拟环境:
conda env create --prefix ENV -f environment.yaml
我有 conda 4.7.12,里面有 Python 3.7.3,所以虚拟环境有它自己的 pip。因此,我激活虚拟环境并显式调用内部的 pip 在虚拟环境中安装我的包:
/Users/my_name/Desktop/dev_dir/ENV/bin/pip install . --user
安装成功,可以导入包了。但是,当我使用 conda deactivate
停用虚拟环境并从 conda base
环境(版本 3.6.9)运行 python 解释器时,我仍然可以加载我的包!由于某种原因,它可以在特定的虚拟环境之外使用......
稍后,当我从 conda base
shell 运行“内部”pip 时:
/Users/my_name/Desktop/dev_dir/ENV/bin/pip uninstall pkg
删除似乎也已完成。我收到一条消息:
Uninstalling pkg-0.0.0.9000:
Would remove:
/Users/my_name/.local/lib/python3.7/site-packages/pkg-0.0.0.9000.dist-info/*
/Users/my_name/.local/lib/python3.7/site-packages/pkg/*
Proceed (y/n)? y
Successfully uninstalled pkg-0.0.0.9000
表明该软件包确实安装在 conda 虚拟环境之外的 .local 目录中。
最后最好的是:即使在卸载之后,当我运行 python 解释器(无论来自哪个环境)并且我尝试 import pkg
它仍然有效!当我在解释器中输入 pkg
时,我得到了我的开发目录的路径:
>>> import pkg
>>> pkg
<module 'pkg' from '/Users/my_name/Desktop/dev_dir/pkg/__init__.py'>
有人可以帮我解决这个困惑吗?我希望将我的软件包安装在虚拟环境中,并很好地隔离。而且 - 卸载后它应该会消失,对吗?
PS。 PYTHONPATH 变量在任何阶段都不会在任何地方设置,我一直在检查......最佳答案
when I then type pkg in the interpreter I get the path to my development directory
只有在以下情况下才会发生这种情况:
- 您修改了
PYTHONPATH
以包含您未执行的/Users/my_name/Desktop/dev_dir
- 当您位于
/Users/my_name/Desktop/dev_dir
文件夹中时,您正在运行解释器,这很可能是因为您将其称为开发文件夹。
检查 print(sys.path)
的输出,其中列出了 import
时搜索的所有目录(标准位置 + PYTHONPATH
) 以及 print(os.getcwd())
因为当前工作目录也会被搜索
您尝试使用以下命令将软件包安装到激活的 conda 环境
/Users/my_name/Desktop/dev_dir/ENV/bin/pip install . --user
查看[文档]( https://pip.pypa.io/en/stable/reference/pip_install/#cmdoption-user] 但是:
--user
Install to the Python user install directory for your platform. Typically
~/.local/
因此 --user
选项会扰乱您安装到当前事件环境中的意图。但 pip 实际上在虚拟环境中运行时默认会执行此操作。所以简单地做:
conda activate <your envname>
pip install .
关于python - conda 虚拟环境中的 pip 安装包未隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58423329/