我有一个奇怪的需求,请教大家

2014-07-14 17:17:26 +08:00
 rrfeng
我写了一个 python 程序,单文件,系统默认环境 ,仅需要额外安装 python 的 X 模块。

现在呢我想把这个 python 程序变成可以随便在相同系统环境的服务器上运行的脚本,但是又不想(或者不能/不方便)在其他服务器上安装 X 模块。

我知道 pyinstaller 可以将 python 程序打包成单个可执行文件,但是这种做法又将服务器上原本就有的东西都包含在里面了,比如 sys 模块等等


不知叙述是否清晰,可有解决办法?
3697 次点击
所在节点    Python
13 条回复
jokester
2014-07-14 17:36:47 +08:00
把X的内容抠出来 和你的程序一起发布?
Kabie
2014-07-14 17:37:06 +08:00
。。。这个X模块横竖都是要放上去的。。。

不方便安装可以用venv……

或者你干脆就把库的代码一起放进去不就好了。。。
tonyluj
2014-07-14 17:40:31 +08:00
直接把库的代码一起放进去
再自己静态编译个python也放进去
这下就省心了
mengskysama
2014-07-14 17:45:30 +08:00
看情况了,如果你用的第三方库是纯python的是没问题的。
sandtears
2014-07-14 19:06:18 +08:00
把第三方库代码一起放进去就好。
rrfeng
2014-07-14 23:06:11 +08:00
@jokester
@sandtears
@tonyluj

大概明白了,就是直接把 import X 替换成 class X : ... ... 的代码,都这么处理就可以了。

但是 X 内部如果有错综复杂的 import 关系呢,手动改很大可能会出错的吧……

谢谢各位
ChanneW
2014-07-14 23:28:06 +08:00
@rrfeng 不是 import 的关系.
你把需要的模块源码和你的代码放到同一个目录
jokester
2014-07-15 00:23:16 +08:00
@rrfeng
也可以把X的代码挖出来(参照virtualenv导出的目录结构), 和你的程序一起分发
运行你的程序时先把X的目录加到sys.path, 再import X
jprovim
2014-07-15 02:10:18 +08:00
如果可以的話, 用virtualenv, 然後安裝所需的lib, 坐如下的命令.
```
pip freeze > requirements.txt
pip install -r requirements.txt
```

如果不方便聯網的話, 可以看看這兩個文章.
http://woodpecker.org.cn/diveintopython3/packaging.html
http://www.ibm.com/developerworks/cn/opensource/os-pythonpackaging/
loading
2014-07-15 06:14:01 +08:00
rrfeng
2014-07-15 08:30:33 +08:00
@ChanneW
将程序和 X 打包成 zip !就是这个办法了!

@jprovim
venv 太大材小用了吧。。我只是想做一个随便拷贝一下就能用的脚本

@loading
理解有误。。
loading
2014-07-15 08:58:48 +08:00
@rrfeng 把你的依赖一起打包就可以了,看下思路,没叫你抄!


其实你把依赖的代码剥离出来放到你的程序文件里就可以了。大部分库也就是写好的函数而已,你理解这个就随便搞了。
sandtears
2014-07-15 13:14:07 +08:00
@rrfeng 不是啊。。
比如说你要用 requests, 直接把人家代码下下来放到当前目录下,然后执行 import requests 就可以导入了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/122587

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX