python - conda 虚拟环境中的 pip 安装包未隔离

标签 python pip anaconda conda

我正在开发一个简单的 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

只有在以下情况下才会发生这种情况:

  1. 您修改了 PYTHONPATH 以包含您未执行的 /Users/my_name/Desktop/dev_dir
  2. 当您位于 /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/

相关文章:

python - 为什么我无法激活健身房表格

python - 属性错误 : module 'tensorflow.python.training.checkpointable' has no attribute 'CheckpointableBase'

python - 我如何获得 Pandas 的年龄和日期

Python 输入 : Describe common properties

python - 更优雅/pythonic 的方式附加到数组,或创建它

python-3.x - 尝试使用 pip 安装 mysqlclient 包时编译错误

python - 我用 pip install 安装的包显示没有模块

python - 替换 NumPy 数组中两个给定值之间的值

python - 如何在 Mac OS X 上安装密码学?

python - 如何在 Anaconda 中将 Python 从 3.7 降级到 3.5