我有两个包安装具有相同名称的不同包.它们都是"包",因为它们具有在命令setup.py中指定的顶级文件.package=['foo']setup
如果我安装使用distutils.core,最后安装将覆盖前一个(但我认为不会覆盖除非.py文件都具有相同的名称?).如果我安装使用setuptools,两个包安装到不同的鸡蛋.
一种选择是sys.path在导入包名之前明确设置; 这似乎是"非pythonic"而且很脏.
假设我在eggssetuptools中安装了这两个名称相同的软件包,我该如何指定导入的软件包?
在setup.py文件install_requires条目中列出依赖项时,如何指定要安装给定的软件包,必须将pip与软件包名称不同的名称传递给?
例如,我可以使用从PyPIpip安装,然后通过执行或类似操作在我的代码中使用。有没有办法告诉SetupTools 实体“提供” 软件包或其他东西?pyintervalfrom interval import interval, inf, imathpyintervalinterval
编辑:我找到了包装词汇表,它为我澄清了“分发包”和“导入包”之间的术语差异。就我而言,pyinterval是分发程序包,它提供了interval导入程序包。
我有以下代码行:
from pip import main as pipmain
# initial installation
pipmain(["install", "pyscenic==0.10.0"])
import pyscenic
pyscenic.__version__
# return 0.10.0
# Some large code here
# second installation
pipmain(["install", "install", "pyscenic==0.10.4"])
import pyscenic
pyscenic.__version__
# still return 0.10.0
# Another large chunk that required new version
Run Code Online (Sandbox Code Playgroud)
我想在我的代码中动态升级pyscenic包。然而,正如我上面指出的,在第二次安装中版本仍然没有改变。我预计它会更改为 0.10.4。我怎样才能正确地做到这一点?
我也尝试过这个,仍然没有效果:
import os
import importlib
os.system('pip install pyscenic==0.10.0')
import pyscenic
pyscenic.__version__
os.system('pip install pyscenic==0.10.4')
import pyscenic
pyscenic.__version__
importlib.reload(pyscenic)
pyscenic.__version__
Run Code Online (Sandbox Code Playgroud)
所有代码都在 IPython(交互式)上进行了测试。如果我退出IPython并再次重新输入它就会生效。但这不是我想要的。