Pyinstaller,将子文件夹路径添加到 sys.path

时间:2021-05-01 14:50:22

标签: python pyinstaller

如何让 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在编译时自动添加这个路径呢?或者还有其他方法可以从子文件夹加载包吗?

1 个答案:

答案 0 :(得分: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)
  • pip install -e 。 (.代表我们项目的根文件夹)

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