我正在开发一个简单的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
我在内部具有Python 3.7.3的conda 4.7.12,因此虚拟环境具有自己的pip。因此,我激活了虚拟环境,并显式调用其中的pip将软件包安装在虚拟环境中:
/Users/my_name/Desktop/dev_dir/ENV/bin/pip install . --user
安装成功,可以导入软件包。但是,当我使用conda deactivate
停用虚拟环境并从conda base
环境(版本3.6.9)运行python解释器时,我仍然可以加载我的包!由于某种原因,它在特定的虚拟环境之外可用...
稍后,当我从conda base
shell运行“内部”点时:
/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变量永远不会在任何阶段设置,我一直在检查...
答案 0 :(得分:2)
当我在解释器中键入pkg时,我会获得开发目录的路径
仅在以下情况下会发生这种情况
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
但是,请看[docs](https://pip.pypa.io/en/stable/reference/pip_install/#cmdoption-user]
--user
安装到您平台的Python用户安装目录。通常为
~/.local/
因此--user
选项与您打算安装到当前活动环境中的意图相混淆。但是pip
实际上是在虚拟环境中运行时默认执行的。只需这样做:
conda activate <your envname>
pip install .
答案 1 :(得分:1)
@FlyingTeller already correctly identified the issue。我只是想指出,您可以通过将软件包的安装添加到YAML定义中来进一步简化流程。例如,
name: my_env
channels:
- defaults
dependencies:
- python=3.7.3
- pip
- pip:
- -e /Users/my_name/Desktop/dev_dir/pkg
这也与最佳做法保持一致(请参阅“ Using Pip in a Conda Environment”)。
答案 2 :(得分:0)
只是希望通过告诉您许多情况经常发生而清除一些错误,如果您忘记了没有使用conda进行root安装的规则,则文件的所有规则都可能会更改,并且突然它不断要求sudo并失败。康达=没有SUDO希望您已解决问题!