Anaconda:永久包含外部包(如在PYTHONPATH中)

Cor*_*yer 32 python anaconda

我知道如何使用Anaconda的安装软件包conda install以及如何安装上的包的PyPI这是在描述手册.

但是,如何将包/文件夹永久地包含PYTHONPATH在Anaconda环境中,以便我可以导入当前正在处理的代码,并且在重新启动后仍然可用?

我目前的做法是使用sys:

import sys
sys.path.append(r'/path/to/my/package')
Run Code Online (Sandbox Code Playgroud)

这不是很方便.

任何提示?

提前致谢!

Cor*_*yer 53

我在Anaconda论坛上找到了我的问题的两个答案:

1.)将模块放入site-packages中,即$HOME/path/to/anaconda/lib/pythonX.X/site-packages始终打开的目录sys.path.这也可以通过创建符号链接来实现.

2.)将.pth文件添加到目录中$HOME/path/to/anaconda/lib/pythonX.X/site-packages.这可以命名为任何东西(它必须以...结尾.pth).一个.pth文件就是目录将被添加到在Python启动您的路径的完整路径,名称的换行分隔上市.

两者都很直接,我选择了第二个选项,因为它更灵活.

***更新:

3.)在软件包的文件夹中创建一个setup.py并使用~/anaconda3/envs/{NAME_OF_ENVIRONMENT}/lib/pythonX.X/site-packages/它从我的角度安装它是最干净的选项,因为你也可以看到所有使用的安装conda-develop /path/to/module/.

不管怎么说,还是要谢谢你!

  • [`conda develop`](https://conda.io/docs/commands/build/conda-develop.html),基本上是实现选项2的脚本,现在似乎可以运行了。 (3认同)
  • 还在等待 [`conda develop`](https://conda.io/docs/commands/build/conda-develop.html):/ (2认同)
  • 确保先运行 `conda install conda-build` (2认同)

小智 10

我可以使用以下方法包含本地模块:

conda-develop /path/to/module/
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助。

  • **提示**(对此挂断了):/path/to/module 不应包含模块名称。;只是父目录的路径。 (2认同)

小智 5

首选的解决方案是构建自己的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/
Run Code Online (Sandbox Code Playgroud)

上面的链接将允许您从任何目录在anaconda的默认环境中导入软件包。这不会影响任何其他环境。

如果要将软件包添加到anaconda中的特定环境(例如-“ myenv”),则可以将软件包链接到该特定环境的sys路径之一:

ln -s /path/to/my/package /path/to/anaconda/env/myenv/lib/python2.7/site-packges/
Run Code Online (Sandbox Code Playgroud)

请注意以下几点:

  • 将软件包目录链接到sys路径,而不是将软件包目录实际移动到sys路径,可以将软件包保留在所选目录中。
  • -s标志生成一个软链接(非常类似于快捷方式)。如果您移动软件包目录,则该链接将无法工作。在ln没有-s标志的情况下运行会生成一个硬链接(如镜像副本),该链接不会受到移动(甚至删除...)软件包目录的影响。软链接和硬链接的优缺点在这里讨论

  • Windows用户应使用mklink。有关信息,请参见此处