用setup.py安装后导入python包,无需重启?

时间:2015-12-14 20:21:26

标签: python package python-module setup.py

我有一个包,我想在我自己的Python脚本中自动安装和使用。

现在我有这个:

>>> # ... code for downloading and un-targzing

>>> from subprocess import call
>>> call(['python', 'setup.py', 'install'])
>>> from <package> import <name>
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named <package>

然后我可以继续这样:

>>> exit()
$ python
>>> from <package> import <name>

它运作得很好。出于某种原因,如果我在运行setup.py文件后重新启动,Python可以正常拿起包,但如果我不这样做则不行。如何在没有中间重启步骤的情况下使其工作?

(另外,使用subprocess.call()在python脚本中运行setup.py还有一个更好的选择吗?看起来愚蠢地从一个内部产生一个全新的Python解释器,但我不知道知道如何传递该安装参数。)

2 个答案:

答案 0 :(得分:2)

根据您的Python版本,您需要查看impimportlib

e.g。对于Python 3,您可以这样做:

from importlib.machinery import SourceFileLoader
directory_name = # os.path to module
# where __init__.py is the module entry point
s = SourceFileloader(directory_name, __init__.py).load_module() 

或者,如果您感到勇敢,您的Python路径知道该目录:

map(__import__, 'new_package_name')

答案 1 :(得分:0)

希望这会有所帮助,

我是从GitHub的seaborn下载的。

通过命令提示符,cd进入downloads \ seaborn文件夹

python install setup.py

然后使用anaconda的spyder,通过在控制台中运行以下命令来检查它是否已安装

import pip
sorted(["%s==%s" % (i.key, i.version)
     for i in pip.get_installed_distributions()])

看到那里不存在,请转到工具并选择“更新模块名称列表”

再次在python控制台中尝试前面的代码,库仍然没有显示。

重新启动Spyder并尝试使用import seaborn

希望这会有所帮助。