【问题标题】:import the development version of a module over the version that is installed in site-packages导入模块的开发版本,而不是安装在站点包中的版本
【发布时间】:2018-08-14 20:16:21
【问题描述】:

我正在开发一个当前封闭源代码的 python 模块,不能在这个例子中继续 pip(不是我的选择),我将它称为private_module。这个模块依赖于我也在开发的另一个模块,它 is 在 pip 上可用,我将其称为 public_module。这是private_module 的问题,public_module 的开发版本位于我与同事共享的 Windows 服务器上的目录中。需要访问代码的计算机具有可变文件权限,因为它们具有可变的 python 含义,很难 pip install ANYTHING 但同时在他们的站点中可能存在private_module 和public_module 的挥之不去的版本-包目录。还假设所有用户都没有编程经验,即使他们这样做了,计算机也无法在没有管理员权限的情况下使用 pip 安装软件包。

目录结构可以这样表示:

  • C:\Program Files\Anaconda3\lib\site-packages\[过时的公共和私有模块]

  • F:\PythonModules\exp\[新的公共和私有模块]

我已经尝试了以下方法,如果模块尚未安装到 pip 中,但安装在 pip 中的模块似乎比其他模块更容易加载,那么它可以完美运行,这是有道理的。

import os
staging = [r"F:\PythonModules\exp"]

for path in staging:
    if os.path.isdir(path):
        sys.path.append(path)

有没有一种方法可以将新的公共和私有模块加载到可能在站点包中的对应模块上?

【问题讨论】:

  • 这不是 virtualenvs 应该解决的问题吗?
  • 假设在这种情况下也是不可能的。
  • 但是你的问题变成了“我如何在没有标准 Python 环境管理工具的情况下管理 Python 环境?” ://

标签: python python-3.x import pip python-importlib


【解决方案1】:

这有点像一个 hacky 解决方法,但它应该适用于您的情况 - 您可以在 sys.path 的开头添加私有模块,因此它将在公共 pip 版本之前读取。像这样的:

import sys
sys.path.insert(0,"F:\PythonModules\exp")

【讨论】:

  • 完美运行!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 2014-08-27
  • 1970-01-01
  • 2022-12-08
  • 1970-01-01
  • 2017-07-30
相关资源
最近更新 更多