【问题标题】:Pyinstaller, adding subfolder path to sys.pathPyinstaller,将子文件夹路径添加到 sys.path
【发布时间】:2021-07-24 14:27:27
【问题描述】:

如何让 pyinstaller 将路径添加到包含包内包的子文件夹?
我正在使用规范文件创建一个文件夹包。我想将一些包保存在包内的单独子文件夹中,但程序看不到这些包。(只有当我将它们移动到主文件夹时,它才能加载这些包)。因此,我已将子文件夹路径添加到 sys.path 以使其正常工作。
当我运行 exe 文件编译后,print(sys.path) 显示两个路径:['C:\dist\MyProgramFolder\base_library.zip', 'C:\dist\MyProgramFolder']
我希望它显示我的子文件夹的额外路径(以便我可以从那里加载包),如下所示:['C:\dist\MyProgramFolder\base_library.zip', 'C:\dist\MyProgramFolder', 'C:\dist\MyProgramFolder\Subfolder']
当然我可以在 Python 脚本的开头添加额外的路径:sys.path.append(os.path.join(os.path.dirname(sys.path[0]),'Subfolder')

但是有什么方法可以让 pyinstaller 在编译时自动添加这个路径?还是有其他方法可以从子文件夹加载包?

【问题讨论】:

  • 另一种思考方式是您在 python 程序中引用文件夹的方式。

标签: python pyinstaller


【解决方案1】:

您可以使用setuptools 轻松完成。

示例项目文件夹结构如下。

.my_project
├── __init__.py
├── _module_a
│   ├── __init__.py
│   └── some_func.py
├── utils.py
└── setup.py

utils.py

def func_util():
    print("func_util called..")

some_func.py

from my_project.utils import func_util


if __name__ == "__main__":
    func_util()

setup.py

from setuptools import setup, find_packages

setup(name='my_project', version='1.0', packages=find_packages())

  • cd my_project (/path-to-root-your-project)
  • python -m venv venv(创建虚拟环境)
  • /venv/Scripts/activate(为 Windows 激活 venv)
  • 点安装-e。 (. 代表我们项目的根文件夹)

运行 some_func.py

​​>
(venv) PS C:\path_to_your_project_folder> python .\module_a\some_func.py
func_util called..

【讨论】:

  • 我会看看 setuptools 但我不知道它有什么帮助。在使用 pyinstaller 编译我的应用程序时,我询问是否向包含包的文件夹(在包内)添加额外路径。
猜你喜欢
  • 2012-08-28
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 2019-12-22
  • 2019-05-15
  • 1970-01-01
  • 2011-04-12
相关资源
最近更新 更多