2017-03-07 70 views
0

我有一个python脚本,它将由系统python执行(在OSX /usr/bin/python上)。这个脚本使用一个外部包(在我的例子中为PyYaml)。使用脚本中的Python包而不安装它

如何在没有pip的情况下提供软件包 - 将其安装到系统python中。我不想为这个脚本创建一个虚拟环境,因为脚本也可以在其他“vanilla”OSX机器上运行。

我正在考虑在脚本所在的同一路径下创建一个目录,并在那里“倾销”外部软件包。但是以什么形式?我在脚本中必须做些什么,才能“看到”本地倾销的软件包?只需修改sys.path

+0

有时我已经成功地将“源包”(.tar.gz,.zip等)(在你的情况下,我认为它是PyYaml)下载到任何目录,然后将该目录追加到'$ PYTHONPATH'环境变量(取决于操作系统)。在Mac/Linux上,我只需设置'export PYTHONPATH = $ PYTHONPATH:',重新加载环境。然后在Python中“导入the_package”。不幸的是,对于一些依赖于CPython的软件包,或者是进入操作系统级别的“C”源文件,这是不可能的,或者很少有效,但是对于大多数python软件包。 – davedwards

+0

我用'pyYaml'试过了,看起来好像有效(我可以导入它),但是那个包里有一些“C”源文件,所以它可能无法按预期工作。 – davedwards

+0

@downshift感谢你。它*应该可以只使用PyYaml的''py'-文件,因为PyYaml根据doco包含“纯Python和基于快速LibYAML的解析器和发射器”(http://pyyaml.org/wiki/PYYAML) 。所以,只要我不从'yaml'导入'CLoader'和'CDumper',我应该没问题。 – halloleo

回答

0

,以增强Synedraacusanswer(*)

您可以将整个yaml子目录PyYAML的复制到你的脚本目录(这是在PyYAML zip文件lib/yaml如果你使用Python 2和Python 3的lib3/yaml)。然后,您可以在代码中使用它,就像安装了PyYaml pip一样。只写:

import yaml 

这当然只有当你不想使用C后端。


(*)我想这个细节添加到Synedraacus的答案,但我的编辑got rejected。因此我将这个增强作为一个单独的答案添加。

0

您可以将pyYaml的*.py文件复制到脚本目录中,并像导入自己的模块一样导入它们。这不是最美丽的解决方案,但它的工作原理。
如果你打算使用C后端,它会更困难。您需要确保您的安装程序正确编译它们,或者使用编译的C模块制作平台相关的分发版。但是那些速度很快,纯Python代码就足够了。