我知道如何使用conda install在Anaconda中安装软件包,以及如何在手册中描述的PyPi上安装软件包。
但是,我如何永久地将软件包/文件夹包含在Anaconda环境的PYTHONPATH中,以便我可以导入当前正在处理的代码并在重新启动后仍然可用?
我目前的方法是使用sys:
import sys
sys.path.append(r'/path/to/my/package')
这不是很方便。
任何提示?
提前致谢!
我不明白"永久包含Anaconda中的包/文件夹,例如我正在使用的代码",意思是,你的意思是a)conda and pip没有在本地安装它们到正确的conda环境中(在这种情况下做< x1>直到你到达正确的Python环境,你可能有几个在conda中),或b)你想手动将第三方软件包与你的软件包捆绑在一起(听起来像一个糟糕的主意,只是定义包依赖)。"永久"是什么意思,在哪台机器上?
我只想成为我正在努力的代码,即使在重新启动后也可以在特定环境中使用/导入。 所以我已经指出了上面的问题。 实际上,我在下面提供了针对我的问题的不同解决方案。 但是,如果有其他方式让我知道,我会添加它们!
我在Anaconda论坛上找到了我的问题的两个答案:
1.)将模块放入site-packages中,即始终在sys.path上的目录$HOME/path/to/anaconda/lib/pythonX.X/site-packages。这也可以通过创建符号链接来实现。
2.)将.pth文件添加到目录$HOME/path/to/anaconda/lib/pythonX.X/site-packages。这可以命名为任何东西(它必须以.pth结尾)。 .pth文件只是一个新行分隔的目录的完整路径名列表,这些目录将在Python启动时添加到您的路径中。
或者,如果您只想链接到特定的conda环境,则将.pth文件添加到~/anaconda3/envs/{NAME_OF_ENVIRONMENT}/lib/pythonX.X/site-packages/
两者都很直接,我选择了第二个选项,因为它更灵活。
***更新:
3.)使用conda develop i。即conda-develop /path/to/module/添加创建.pth文件的模块,如选项2所述。
4.)在软件包的文件夹中创建一个setup.py并使用pip install -e /path/to/package安装它,这是我认为最干净的选项,因为您还可以使用pip list查看所有安装。
不管怎么说,还是要谢谢你!
还在等待conda develop:/
conda develop,基本上是一个实现选项2的脚本,现在似乎正在运行。
#2似乎对我不起作用(我似乎没有相同的目录结构;我没有python.X.X的多个选项,我的'lib'是大写的)
#2对我来说很好
@information_interchange很可能原因是这些目录结构差异的原因是由Windows vs. Linux实现引起的。在Windows下,python在构建sys.path时所看到的位置略有不同。请参阅docs.python.org/3/library/site.html我相信Windows中的路径将是....path_to_anaconda/lib/site-packages(在Windows中,大写/小写也无关紧要)
首选的解决方案是构建自己的conda包(此处的信息)。
另一种解决方案是在包目录和sys.path中的任何目录之间创建一个链接。这样,当您要求python导入您的包时,anaconda将搜索其各种sys.path目录,它将读取您的包的链接,就好像该包位于其中一个sys.path目录中一样。
使用ln(link_name)命令可以轻松链接目录。举个例子:
ln -s /path/to/my/package /path/to/anaconda/lib/python2.7/site-packages/
上面的链接将允许您从任何目录在anaconda的默认环境中导入您的包。这不会影响任何其他环境。
如果要将包添加到anaconda中的特定环境(例如 -"myenv"),可以将包链接到该特定环境的sys路径之一:
ln -s /path/to/my/package /path/to/anaconda/env/myenv/lib/python2.7/site-packges/
请注意以下事项:
将包目录链接到sys路径,而不是实际将包目录移动到sys路径,允许您将包保留在您选择的目录中。
-s标志生成一个软链接(很像快捷方式)。如果移动包目录,链接将无法工作。在没有-s标志的情况下运行ln会生成硬链接(如镜像副本),该链接不会受到移动(甚至删除..)程序包目录的影响。这里讨论了软链接和硬链接的优缺点
Windows用户应该使用mklink。有关信息,请查看此处。
我可以使用以下内容包含本地模块:
conda-develop /path/to/module/
我希望它有所帮助。
谢谢你的暗示!我已经调整了我的答案,因为命令只会创建一个.pth文件,如2所述。
提示(挂了这个):/ path / to / module不应包含模块名称。只是父目录的路径。
注意:如果必须编译包的某些元素,例如Cython或f2py代码,则可以使用:python setup.py build_ext --inplace
我这样做的方式,我相信是conda最本机的,就是在我的环境中创建env_vars.sh文件,根据这里的官方文档。
对于macOS和Linux用户,步骤如下:
转到您的环境文件夹(例如/miniconda1/env/env_name)。 $CONDA_PREFIX是环境路径的environemnt变量。
cd $CONDA_PREFIX
创建activate.d和deactivate.d目录。
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
在每个相应目录中,创建一个env_vars.sh文件。当您conda activate环境时,activate.d目录中的那个将设置(或export)您的环境变量。当您conda deactivate环境时,deactivate.d目录中的文件将用于取消设置环境变量。
touch ./etc/conda/activate.d/env_vars.sh
touch ./etc/conda/deactivate.d/env_vars.sh
首先将$CONDA_PREFIX/etc/conda/activate.d/env_vars.sh编辑为export所需的环境变量。
#!/bin/sh
export VAR_A='some-thing-here'
export VAR_B=/path/to/my/file/
然后,打开以编辑$CONDA_PREFIX/etc/conda/deactivate/env_vars.sh,以便在conda deactivate时的env变量如下:
#!/bin/sh
unset VAR_A
unset VAR_B
同样,我的描述来源直接来自这里的conda文档。
只是为了增加Cord Kaldemeyer上面的答案,第二个选项。如果您只想链接到特定的conda环境,请将.pth文件添加到~/anaconda3/envs/{NAME_OF_ENVIRONMENT}/lib/pythonX.X/site-packages/