我想创建一个可重定位的环境。因此,我需要在软件包安装中使用相对路径。为此,我只需创建一个Conda环境,如下所示:
conda create --prefix env python=3.6.5
activate .\env
然后像往常一样使用
安装了所需的软件包。pip install package_name
当我想安装自己的软件包时,问题就来了。我创建了这样的结构,并遵循了this tutorial:
some_root_dir/
|-- setup.py
|-- python_files
|-- |-- runall.py
|-- |-- test0.py
setup.py
的内容是这样的:
from setuptools import setup
setup(
name='my_app',
version='0.1',
description='My app',
keywords="app csv some other word",
url='https://www.my_domain.com/',
author='My name',
author_email='email@email_domain.com',
license='MIT',
packages=['my_package'],
zip_safe=False,
)
但是在安装后使用:
cd some_root_dir
pip install .
并将其移动到另一个位置,应用程序中显示的路径就是我执行pip install .
我一直在寻找信息here,但没有发现任何有用的信息。
python.exe
,python应该知道软件包的安装位置以及如何导入。注意:我正在使用Windows 10和Miniconda 3。
virtualenv上的等效项为this:
virtualenv --relocatable env_folder
但这是一个实验性功能
实际上,我要的是@interfect在他的评论中所说的,问题是here。因此,无法在conda上重定位环境
答案 0 :(得分:0)
我认为可重定位环境取决于安装的软件包。应该使用相对路径来实现它们,并避免使用硬编码的路径。包的源代码中使用的所有路径都应在自己的包内。因此,如果您安装完好软件包,则可以在其他文件夹或计算机中重新定位环境。
由于需要将所有文件夹添加到包中,因此需要修改setup
的参数。添加这两个参数以便将文件夹添加到最终程序包。如果不这样做,则文件夹将不会复制到环境(使用site-packages
安装软件包的最终目的地)中的pip
文件夹中:
packages=[
'main_folder',
'main_folder.folder_with_python_files',
'main_folder.other_folder_with_python_files',
],
package_data={
'main_folder': [
'static/css/*.*',
'templates/*.*',
],
},
我尝试使用 Virtualenv 在Windows上构建环境,但是在构建基本环境时遇到一些问题:
VCRUNTIME140.dll
runpy
模块也丢失了。这用于运行带有-m
参数的命令:python -m ...
pip
之类的zipfile
时未安装其他软件包依赖项所以我又回到了 Conda Environments ,但是我使用软件包管理器pip
而不是conda
构建了环境,因为我的软件包要轻得多。情况。
因此,我的建议是使用pip
安装软件包。如果其中任何一个在重定位后出现问题,我们应该检查是否有任何编码路径并直接更改它。尽管最好的解决方案是修改原始源代码并安装定制的软件包。
环境中的某些python脚本在标头上带有#!
的绝对路径。
#!C:\absolute\path\to\python.exe
我之所以删除了它们,是因为如果我使用those headers are ignored环境中当前的python.exe
调用任何脚本,那么
conda-pack
也可能有用。我还没有尝试过
conda-pack
是用于创建可重定位conda环境的命令行工具。这对于在一致的环境(可能尚未安装python / conda的位置)中部署代码很有用。
答案 1 :(得分:0)
如果将软件包转换为conda软件包(如果已经在使用pip,则很简单),只需conda将软件包安装在新计算机上,一切将在安装时重新定位。
包括所有已编译的库,更不用说脚本中的路径了。 Conda会修改所有内容,因此无论您在何处安装它都可以正常工作。