典型地,一个运行jupyter notebook或jupyter-notebook或ipython notebook在终端局部地启动一个Jupyter笔记本网络服务器(和打开的浏览器中的URL)。使用conda
和conda 环境时,运行允许导入安装在 conda 环境中的 Python 模块的 Jupyter notebook 的最佳方法是什么?
因为它似乎,这 是 不是 很 直 向前 并 不少 用户 都有 类似的 烦恼。
最常见的错误信息似乎是:在康达环境中安装包后,XYZ
my-env一个可以运行import XYZ在开始一个python控制台my-env中,但在运行相同的代码Jupyter笔记本将导致一个ImportError。
这个问题已经问过很多次了,但是没有很好的地方来回答它,大多数问答和Github门票都很混乱,所以让我们在这里开始新的问答。
因为我必须在通过kickstart进程构建的多个Oracle Linux服务器上安装多个版本的Python,所以我想为yum存储库构建一个python rpm.我能够使用'make altinstall'手动构建Python,它不会安装在你的默认系统Python安装上,所以我认为这是要走的路.
经过多次试验和错误,我设法用.bz2 python 2.7软件包开始构建rpm - 但是现在当我尝试安装它时,我收到一个错误:
error: Failed dependencies:
/usr/local/bin/python is needed by Python-2.7.2-1.i386
Run Code Online (Sandbox Code Playgroud)
什么...... ??? Python是我正在尝试安装的!系统默认的Python(2.4)在/ usr/bin/python中!我的python目录的原型位置是/tmp/python2.7(可执行文件是/tmp/python2.7/bin/python2.7).那为什么要查看/ usr/local/bin?
这是我的RPM SPEC的核心:
%prep
%setup -q
%build
./configure --prefix=/tmp/python2.7
make
%install
make altinstall
Run Code Online (Sandbox Code Playgroud)
我仔细看看rpm构建日志,我看到:
Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...]
Run Code Online (Sandbox Code Playgroud)
好的,所以有/ usr/local/bin进来的地方......现在,问题是,它是如何确定这些要求的呢?我说错了吗?我需要覆盖一些东西吗?
像许多rpm新手一样,我得到了构建部分,但我并没有真正"理解"在rpmbuild结束时发生的事情以及实际放入rpm文件的内容(除了你在%files中指定的文件)然后是什么实际上在你进行rpm安装时会发生.
任何人都可以建议为什么我的安装失败或我可能会读到什么来理解为什么我的rpm构建需要我正在尝试构建的东西?
我为使用模块(https://luarocks.org/)管理软件包的系统编写了小型python 软件包。对于那些不了解它的人,可以运行module load x并运行一个小的脚本来修改各种环境变量以使软件“ x”正常工作,然后可以使用撤消该操作module unload x。
这种软件管理方法在科学计算中几乎无处不在,并且在该领域具有很大的价值:您可以将古老的未维护软件与该软件可能会干扰的软件包一起运行,可以运行多个版本的软件,从而使自己的产品再现。准确地记录数据(您可以返回到旧版本),并且可以运行具有过时依赖关系的坦率地编写未更新的软件。
这些功能很棒,但是它们在python 2/3 split中造成了问题:
如果您想编写一个同时适用于python 2和3 的软件包并将其与需要 python 2或3的软件一起使用怎么办?
使旧的python2依赖软件在这些大型系统上工作的方式是,您制作了python / 2.7.x模块和python / 3.5模块。当您要运行使用python 2的脚本时,请加载该模块等。
但是,我想编写一个可以在两种环境下都可以使用的python软件包,因为无论使用哪种python解释器,我都希望该软件处于活动状态。
从根本上讲,这非常容易:只需使用#!/usr/bin/env pythonshebang线就可以了。这样可行。我编写了所有软件都可以使用,所以没有问题。
问题是:我想使用setuptools将我的软件包分发给处于相同情况的其他科学家,而setup工具会破坏shebang线。
我不想就修改shebang线是否是一个好主意展开辩论,我相信这是因为它已经在同一状态下存在多年了。老实说,我不在乎,这对我不起作用。默认的setuptools安装会导致软件无法运行,因为当未加载python解释器的模块时,该python解释器将无法运行,这PYTHONPATH是完全错误的。
如果我所有的用户都具有root用户访问权限,则可以使用该data_files选项将脚本复制到/usr/bin,但这对兼容性不是一个好主意,而且我的用户也没有root用户访问权限,因此这是一个有争议的问题。
到目前为止,我尝试过的事情:
我尝试设置sys.executable到/usr/bin/env python中setup.py文件,但不起作用,因为那时家当是:#!"/usr/bin/env python",这显然是行不通的。
我在以下问题中尝试了“不要触碰我的shebang类”想法:不要触碰我的shebang!(这是最低的答案,票数为0)。那也不起作用,可能是因为它是为distutils而不是setuptools编写的。再加上这个问题已有6年历史了。
我还看了这些问题:
Setuptools entry_points / console_scripts在shebang中具有特定的Python版本
那里描述的方法不起作用,shebang线仍被更改。
创建一个setup.cfg包含以下内容的文件:
[build]
executable = /usr/bin/env python
Run Code Online (Sandbox Code Playgroud)
也不会改变shebang行的行为。 …