代码之家  ›  专栏  ›  技术社区  ›  Engineero

使用虚拟环境管理Jupyterhub中的开发/部署包

  •  0
  • Engineero  · 技术社区  · 6 年前

    我有一个为本地服务器开发的包。我想把当前的稳定版本导入Jupyter笔记本,使用 import my_package 以及当前可导入的开发状态(用于端到端测试和东西) import my_package_dev 或者类似的。

    该包的版本由Git控制。这个 master 分支保持稳定的发布,新的开发工作在 develop 分支。

    我目前把这两个分支放到了两个不同的文件夹中:

    my_package/  # tracks master branch of repository
        setup.py
        requirements.txt
        my_package/
            __init__.py
            # other stuff
    
    my_package_dev/  # tracks develop branch of repository
        setup.py
        requirements.txt
        my_package/
            __init__.py
            # other stuff for dev branch
    

    我的 setup.py 文件如下:

    from setuptools import setup
    setup(
          name='my_package',  # or 'my_package_dev' for the dev version
          # metadata stuff...
         )
    

    我可以 pip install my_package 很好,但是我找不到任何链接到这个名字的东西 my_package_dev 在巨蟒中。

    我试过的东西

    • pip install my_package_dev

      似乎没有覆盖现有的 my_package 但似乎没有 我的软件包开发 也可以,即使pip说它完成的很好。

    • pip install -e my_package_dev

      做一个鸡蛋,把开发包的路径放进去 easy-install.pth 但是我不能 导入我的包开发 我的包裹 还是老内容。

    • 添加文件 my_package_dev.pth 到站点包目录并用 /path/to/my_package_dev

      不会导致可见的更改。还是不允许我 导入我的包开发 .

    对解决方案的思考

    正如答案中所讨论的,看起来最好的方法是使用虚拟环境。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Gonzalo Matheu    6 年前

    PIP安装 您可以在setup.py的name属性中按其名称安装包。如果同时安装和执行 PIP冻结 ,您将看到列出的两个包。哪些代码可用取决于它们是如何包含在python路径中的。

    问题是这两个包只包含一个名为 我的包裹 ,这就是为什么你不能导入 我的软件包开发 (它不存在)。

    我建议您为每个版本准备一份工作副本(不修改包名称),并使用 virtualenv 使环境保持隔离(一个用于稳定版本的virtualenv,另一个用于dev)。 您还可以使用PIP的可编辑安装来使用工作副本更新环境。

    注意:重命名 我的软件包开发人员的我的软件包 模块目录到 我的软件包开发 也可以。但是将一个版本的更改合并到另一个版本会比较困难。

        2
  •  0
  •   Engineero    6 年前

    Gonzalo提供的答案让我走上了正确的道路:使用虚拟环境管理两个不同的构建。我为主(稳定)分支创建了虚拟环境,其中包括:

    $ cd my_package
    $ virtualenv venv  # make the virtual environment
    $ source venv/bin/activate
    (venv) $ pip install -r requirements.txt  # install everything listed as a requirement
    (venv) $ pip install -e .  # install my_package dynamicially so that any changes are visible right away
    (venv) $ sudo venv/bin/python -m ipykernel install --name 'master' --display-name 'Python 3 (default)'
    

    对于开发部门,我在 my_package_dev 文件夹,给它一个不同的 --name --display-name 价值。

    注意我需要使用 sudo 在决赛中 ipykernel install 命令,因为我在系统上不断出现被拒绝权限的错误。我建议你不要 苏多 首先,但对于这个系统,它需要在整个系统范围内安装。

    最后,要在使用的工具版本之间切换,我只需选择 Kernel -> Change kernel 然后选择 Python 3 (default) Python 3 (develop) . 进口保持不变( import my_package ,所以里面没有 笔记本 必须改变。

    这并不是我理想的场景,因为这意味着我将不得不在每次更换内核时重新运行整个笔记本,但它是有效的!