Skip to content

Commit 5d46448

Browse files
author
PyCompiler ARK++
committed
Add venv support and examples to package_copier module
- Add examples_package_copier.py with 9 comprehensive usage examples - Update PACKAGE_COPIER_README.md with venv functionality documentation - Examples include: * Listing packages * Copying to venv * Copying with dependencies * Getting package info * Finding venv site-packages * Verifying packages * Getting statistics - All examples are well-documented and ready to run
1 parent b8c1ed1 commit 5d46448

2 files changed

Lines changed: 281 additions & 0 deletions

File tree

Core/PACKAGE_COPIER_README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,33 @@ copied, failed = copier.copy_packages_with_dependencies(
7272
)
7373
```
7474

75+
#### Copy Packages to Virtual Environment
76+
77+
```python
78+
from Core.package_copier import PackageCopier
79+
80+
copier = PackageCopier()
81+
packages = ["numpy", "pandas"]
82+
83+
# Copy to current venv (auto-detected)
84+
copied, failed = copier.copy_to_venv(packages)
85+
86+
# Or specify a custom venv path
87+
copied, failed = copier.copy_to_venv(packages, venv_path="/path/to/venv")
88+
```
89+
90+
#### Copy Packages with Dependencies to Virtual Environment
91+
92+
```python
93+
from Core.package_copier import PackageCopier
94+
95+
copier = PackageCopier()
96+
packages = ["numpy", "pandas"]
97+
98+
# Copy with dependencies to current venv
99+
copied, failed = copier.copy_to_venv_with_dependencies(packages)
100+
```
101+
75102
### Advanced Usage
76103

77104
#### Get Package Information

examples_package_copier.py

Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
#!/usr/bin/env python3
2+
# SPDX-License-Identifier: Apache-2.0
3+
# Example usage of the package_copier module
4+
5+
"""
6+
Examples of using the package_copier module to copy Python packages
7+
from system directories to a virtual environment.
8+
"""
9+
10+
import os
11+
import sys
12+
import logging
13+
from Core.package_copier import (
14+
PackageCopier,
15+
copy_to_venv_simple,
16+
copy_to_venv_with_deps_simple,
17+
list_system_packages,
18+
)
19+
20+
21+
# Setup logging
22+
logging.basicConfig(
23+
level=logging.INFO,
24+
format="%(levelname)s: %(message)s",
25+
)
26+
27+
28+
def example_1_list_packages():
29+
"""Example 1: List all available system packages"""
30+
print("\n" + "="*70)
31+
print("Example 1: List all available system packages")
32+
print("="*70)
33+
34+
packages = list_system_packages()
35+
print(f"Found {len(packages)} packages")
36+
print("First 10 packages:")
37+
for pkg in packages[:10]:
38+
print(f" - {pkg}")
39+
40+
41+
def example_2_copy_to_venv():
42+
"""Example 2: Copy packages to current venv"""
43+
print("\n" + "="*70)
44+
print("Example 2: Copy packages to current venv")
45+
print("="*70)
46+
47+
packages = ["numpy", "requests"]
48+
print(f"Copying packages: {packages}")
49+
50+
copied, failed = copy_to_venv_simple(packages)
51+
52+
print(f"\nResults:")
53+
print(f" Copied: {len(copied)} packages")
54+
print(f" Failed: {len(failed)} packages")
55+
56+
if copied:
57+
print(f" Successfully copied: {', '.join(copied)}")
58+
if failed:
59+
print(f" Failed packages:")
60+
for pkg, error in failed.items():
61+
print(f" - {pkg}: {error}")
62+
63+
64+
def example_3_copy_with_dependencies():
65+
"""Example 3: Copy packages with dependencies to venv"""
66+
print("\n" + "="*70)
67+
print("Example 3: Copy packages with dependencies to venv")
68+
print("="*70)
69+
70+
packages = ["numpy"]
71+
print(f"Copying packages with dependencies: {packages}")
72+
73+
copied, failed = copy_to_venv_with_deps_simple(packages)
74+
75+
print(f"\nResults:")
76+
print(f" Copied: {len(copied)} packages (including dependencies)")
77+
print(f" Failed: {len(failed)} packages")
78+
79+
if copied:
80+
print(f" Successfully copied: {', '.join(copied)}")
81+
82+
83+
def example_4_get_package_info():
84+
"""Example 4: Get information about a package"""
85+
print("\n" + "="*70)
86+
print("Example 4: Get information about a package")
87+
print("="*70)
88+
89+
copier = PackageCopier()
90+
91+
package_name = "numpy"
92+
info = copier.get_package_info(package_name)
93+
94+
if info:
95+
print(f"Package: {info['name']}")
96+
print(f" Type: {info['type']}")
97+
print(f" Version: {info['version']}")
98+
print(f" Size: {info['size'] / 1024:.2f} KB")
99+
print(f" Dependencies: {len(info['dependencies'])}")
100+
if info['dependencies']:
101+
print(f" First 3 dependencies:")
102+
for dep in info['dependencies'][:3]:
103+
print(f" - {dep}")
104+
else:
105+
print(f"Package not found: {package_name}")
106+
107+
108+
def example_5_find_venv():
109+
"""Example 5: Find venv site-packages directory"""
110+
print("\n" + "="*70)
111+
print("Example 5: Find venv site-packages directory")
112+
print("="*70)
113+
114+
site_packages = PackageCopier.find_venv_site_packages()
115+
116+
if site_packages:
117+
print(f"Found venv site-packages: {site_packages}")
118+
print(f"Directory exists: {os.path.isdir(site_packages)}")
119+
else:
120+
print("Could not find venv site-packages directory")
121+
122+
123+
def example_6_copy_to_custom_venv():
124+
"""Example 6: Copy packages to a specific venv"""
125+
print("\n" + "="*70)
126+
print("Example 6: Copy packages to a specific venv")
127+
print("="*70)
128+
129+
# Example: copy to a specific venv path
130+
venv_path = os.environ.get("VIRTUAL_ENV")
131+
132+
if venv_path:
133+
print(f"Current venv: {venv_path}")
134+
135+
packages = ["requests"]
136+
print(f"Copying packages: {packages}")
137+
138+
copied, failed = copy_to_venv_simple(packages, venv_path=venv_path)
139+
140+
print(f"\nResults:")
141+
print(f" Copied: {len(copied)} packages")
142+
print(f" Failed: {len(failed)} packages")
143+
else:
144+
print("No virtual environment detected")
145+
146+
147+
def example_7_copy_multiple_packages():
148+
"""Example 7: Copy multiple packages at once"""
149+
print("\n" + "="*70)
150+
print("Example 7: Copy multiple packages at once")
151+
print("="*70)
152+
153+
packages = ["requests", "urllib3", "certifi"]
154+
print(f"Copying packages: {packages}")
155+
156+
copied, failed = copy_to_venv_simple(packages)
157+
158+
print(f"\nResults:")
159+
print(f" Copied: {len(copied)} packages")
160+
print(f" Failed: {len(failed)} packages")
161+
162+
if copied:
163+
print(f" Successfully copied: {', '.join(copied)}")
164+
if failed:
165+
print(f" Failed packages:")
166+
for pkg, error in failed.items():
167+
print(f" - {pkg}: {error}")
168+
169+
170+
def example_8_verify_packages():
171+
"""Example 8: Verify copied packages"""
172+
print("\n" + "="*70)
173+
print("Example 8: Verify copied packages")
174+
print("="*70)
175+
176+
copier = PackageCopier()
177+
site_packages = PackageCopier.find_venv_site_packages()
178+
179+
if site_packages:
180+
packages = ["numpy", "requests"]
181+
print(f"Verifying packages in: {site_packages}")
182+
183+
for pkg in packages:
184+
verified = copier.verify_package(pkg, site_packages)
185+
status = "✓" if verified else "✗"
186+
print(f" {status} {pkg}")
187+
else:
188+
print("Could not find venv site-packages directory")
189+
190+
191+
def example_9_get_statistics():
192+
"""Example 9: Get statistics about copied packages"""
193+
print("\n" + "="*70)
194+
print("Example 9: Get statistics about copied packages")
195+
print("="*70)
196+
197+
copier = PackageCopier()
198+
199+
# Copy some packages
200+
packages = ["numpy", "requests"]
201+
print(f"Copying packages: {packages}")
202+
copier.copy_to_venv(packages)
203+
204+
# Get statistics
205+
stats = copier.get_statistics()
206+
207+
print(f"\nStatistics:")
208+
print(f" Total copied: {stats['total_copied']}")
209+
print(f" Total failed: {stats['total_failed']}")
210+
print(f" Total size: {stats['total_size_mb']} MB")
211+
print(f" Copied packages: {', '.join(stats['copied_packages'])}")
212+
213+
214+
def main():
215+
"""Run all examples"""
216+
print("\n" + "="*70)
217+
print("Package Copier Module - Usage Examples")
218+
print("="*70)
219+
220+
try:
221+
# Run examples
222+
example_1_list_packages()
223+
example_4_get_package_info()
224+
example_5_find_venv()
225+
226+
# Only run venv-related examples if venv is detected
227+
if os.environ.get("VIRTUAL_ENV"):
228+
example_2_copy_to_venv()
229+
example_3_copy_with_dependencies()
230+
example_6_copy_to_custom_venv()
231+
example_7_copy_multiple_packages()
232+
example_8_verify_packages()
233+
example_9_get_statistics()
234+
else:
235+
print("\n" + "="*70)
236+
print("Note: Virtual environment not detected")
237+
print("Skipping venv-related examples")
238+
print("="*70)
239+
240+
print("\n" + "="*70)
241+
print("Examples completed successfully!")
242+
print("="*70 + "\n")
243+
244+
except Exception as e:
245+
print(f"\nError: {e}")
246+
import traceback
247+
traceback.print_exc()
248+
return 1
249+
250+
return 0
251+
252+
253+
if __name__ == "__main__":
254+
sys.exit(main())

0 commit comments

Comments
 (0)