我的系统管理员不允许全局安装python包。
我正在编写一个脚本,人们会调用它来为它们执行某些操作。我写的脚本需要某些库,如sqlalchemy
和coloredlogs
。但是我可以安装python libs任何本地文件夹。即不是网站包。
我如何在与脚本相同的文件夹中安装libs,以便脚本可以访问它们?
我的文件夹层次结构是这样的
script_to_invoke.py
scriptpack/
bin/
coloredlogs
coloredlogs.egg
...
utils/
util1.py
util2.py
(所有指定的文件夹都有__init__.py
)
到目前为止我尝试过:
在script_to_invoke.py
内我使用
from scriptpack.utils invoke util1 # no problem here
from scriptpack.bin import coloredlogs # fails to find the import
我已经看了一些其他的答案,我不知道如何将它们与我的问题联系起来。
答案 0 :(得分:1)
您可以使用if RainbowLabel.isHidden == true {
UIView.animate(withDuration: TimeInterval(0.3), animations: {
self.Red.frame = CGRect(x: self.Red.frame.origin.x, y: self.Red.frame.origin.y - 60 , width: 42, height: 21)
}) {(finished) in
if (126 ... 206).contains(self.Red.frame.origin.x) && (45 ... 85).contains (self.Red.frame.origin.y) {
ProgressHUD.showSuccess("Score! Red")
self.score += 1
self.scoreLabel.text = String(self.score)
self.Red0 = 1
if self.Red0 == 1 && self.Orange0 == 1 && self.Yellow0 == 1 && self.Green0 == 1 && self.Blue0 == 1 && self.Purple0 == 1 {
self.RainbowLabel.isHidden = true
self.ResetLabel.isHidden = false
ProgressHUD.showSuccess("15 Points")
self.score += 15
self.scoreLabel.text = String(self.score)
}
}
}
}
标记在非全局位置(通常位于~/.local/lib/python<x.y>
)中安装这些软件包,例如:
--user
这样您就不必担心改变导入的工作方式,并且您仍然符合您的系统管理员政策。
答案 1 :(得分:1)
如果您想尝试packaging up everything as a zipapp
。这样做会产生一个单独的zip文件,它充当Python脚本,但可以包含大量嵌入式软件包。制作它的步骤是:
testapp
)__main__.py
并将其放在该文件夹中pip
,将所需的软件包安装到包含--target=/path/to/testapp
python3 -mzipapp testapp -p='/usr/bin/env python3'
(提供shebang行是可选的;没有它,用户将需要使用python3 testapp.pyz
运行包,而使用shebag,他们可以执行./testapp.pyz
)< / LI>
醇>
这会创建一个zip文件,其中包含您的脚本旁边的所有要求,甚至不需要解压缩才能运行(Python知道如何本地运行zip应用程序)。作为一个简单的例子:
$ mkdir testapp
$ echo -e '#!/usr/bin/python3\nimport sqlalchemy\nprint(sqlalchemy)' > __main__.py
$ pip3 install --target=./testapp sqlalchemy
$ python3 -mzipapp testapp -p='/usr/bin/env python3'
$ ./testapp.pyz
<module 'sqlalchemy' from './testapp.pyz/sqlalchemy/__init__.py'>
显示简单主程序如何从同一个zipapp中访问sqlalchemy
。它也更小(由于压缩)分发未压缩的模块:
$ du -s -h testapp*
13M testapp
8.1M testapp.pyz
答案 2 :(得分:0)
我明白了!
必须指示Python查找.egg
文件
这可以通过
PYTHONPATH
var BEFORE 启动解释程序(或)以下代码:
import sys
for entry in [<list of full path to egg files in bin dir>]:
sys.path.append(str(entry))
# Proceed with local imports