在Python中导入分支模块而不是安装的模块

14

我想要对GitHub上的一个公共项目进行更改(如果好的话可能会做出贡献)。我已经fork和clone了该模块,但不清楚如何使我的程序导入本地库而不是已安装的“官方”模块。

我尝试将其克隆到我的项目文件夹中,但当我导入并尝试使用它时,情况变得很奇怪 calmap\calmap.plot()

我还尝试了sys.path.append和文件夹位置。 但似乎仍然导入官方版本而不是fork的版本。

我假设我可以将我的程序放在模块文件夹内,以便先找到该模块,但我无法想象这是“正确”的方法。

|
|-->My_Project_Folder/
|
|-->Forked_Module/
     |-->docs/
     |-->Forked_Module/
          |-->__init__.py

这是一个情况,最好的选择可能是在虚拟环境中运行fork,例如virtualenvanaconda - mgilson
这是一个重复的问题,与https://dev59.com/umAg5IYBdhLWcg3w3uMR相同。 - Ram
为什么不将Forked_Module的根目录放入My_Project_Folder中,并从那里导入模块呢?与python-从子文件夹导入模块进行比较。 - keocra
@mgilson 我实际上使用Anaconda(用于jupyter笔记本),如果更容易,我该如何设置? - DChaps
3个回答

4
如果您已经在使用Anaconda,那么您可以为开发此功能创建一个新环境。
首先,创建一个新环境:
# develop_lib is the name of the environment.
# You can pick anything that is memorable instead.
# You can also use whatever python version you require ...
conda create -n develop_lib python3.5

一旦您拥有了环境,那么您可能希望在当前会话中进入该环境:

source activate develop_lib

好的,现在你已经设置了环境,可能需要安装一些与你正在开发的第三方库相关的要求。我不知道这些依赖关系是什么,但你可以使用conda install(如果它们可用)或使用pip在你的环境中安装它们。现在,你已经可以开始使用你想要更新的库进行工作了。假设该软件包具有标准构建过程,则应该可以使用python setup.py develop。运行后,你就可以进行更改,运行测试等操作。


添加 develop 标志似乎是关键。幸运的是,如果我在 Anaconda 环境处于活动状态时打开笔记本内核,它似乎会识别我想要的本地 calmap 版本。 - DChaps

2
如果你使用sys.path.append(),那么如果之前的路径中都没有包含你要导入的模块,新的“路径”将被使用。如果你希望“添加的路径”优先于所有旧的路径,你需要使用:
sys.path.insert(0, "path")

这样,如果您打印sys.path,您会看到添加的路径在列表的开头,您导入的模块将从您指定的路径加载。


虽然路径已经正确添加到 sys.path 中,但仍无法正常工作。我应该添加 /Users/.../calmap 还是 /Users/.../calmap/calmap?还有其他想法或信息对我有帮助吗? - DChaps
1
对于你在问题中发布的示例树:sys.path.insert(0,'/Users/...../Forked_Module')。然后使用 import Forked_Module 进行导入。如果这不起作用,那么请使用你实际使用的行,然后加上 print sys.path - Riccardo Petraglia

0

如果想从 fork 的代码库中导入而不是 python 包,应该为克隆的项目创建虚拟环境并激活它,这样该环境就与全局安装的包隔离开来。

1- 需要 fork 你的代码库;

2- 创建虚拟环境并激活它;

3- 克隆你的代码库。

现在,如果打印你的 import,你将看到 forked repo 的路径。

import any_module
print(any_module)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接